В настоящее время я создаю веб-приложение с использованием ASP.NET MVC. На мой взгляд, у меня есть несколько форм, которые получают данные, которые нужно поместить в тело почтового ответа. Я хотел бы прикрепить эти входные данные к моей модели представления, а затем передать мою модель представления обратно в контроллер, чтобы работать с ними.

Вот пример того, что есть в моем веб-приложении:

<select id="ServiceSelect" size="3" style="width:600px; overflow-y:auto" multiple="multiple">
                <option value="Service 1" class="pad">Service 1 </option>
                <option value="Service 2" class="pad">Service 2</option>
                <option value="Service 3" class="pad">Service 3</option>
            </select> 

            <input type="hidden" id="service" name="service" value="" />
            
            <!-- this puts the two buttons side by side after the select -->
            <br />

            <input type="submit" name="start" value="Start Service(s)" />
            <input type="submit" name="stop" value="Stop Service(s)" />

(скрытый ввод заполняется с помощью функций jQuery на основе формы выбора)

Я хотел бы использовать характеристики привязки модели Razor Pages, чтобы добавить скрытый ввод в мою модель при выборе одной из кнопок отправки. В настоящее время с помощью Fiddler я вижу, что он правильно заполняет тело ответа, но я думаю, что привязка собственной модели MVC может быть более чистым подходом.

Однако в таких примерах кода:

<td>
     @Html.DropDownListFor(m => m.Gender /* <- this being what I want */, new List<SelectListItem>
     { new SelectListItem{Text="Male", Value="M"},
       new SelectListItem{Text="Female", Value="F"}}, "Please select")
</td>

Я не вижу способа включить мои текущие функции и стиль, которые я установил, с помощью моего собственного тега выбора (множественный выбор, стиль).

Я новичок в Razor Pages, поэтому плохо знаю синтаксис встроенных функций. Я считаю, что необработанный HTML легче кодировать, читать и стилизовать, но мне не удалось найти какие-либо онлайн-ресурсы, которые помогли бы мне с этой проблемой.

Есть ли способ воспользоваться преимуществами характеристик привязки модели MVC / Razor Pages при включении собственных HTML-форм вместо менее расширяемых (на мой, возможно, ошибочных знаний и мнений) встроенных @Html?

-1
nostalgk 25 Сен 2018 в 01:58

2 ответа

Лучший ответ

Насколько я понимаю, вы ищете привязку модели

Чтобы реализовать то же самое, ваш код должен выглядеть следующим образом: Пример кода:

Вид

< Сильный > Index.cshtml

@model WebApplication3.Models.Test
@{
ViewBag.Title = "Home Page";
}


@using (Html.BeginForm("Save", "Home", FormMethod.Post))
{
 <div class="row">
 <div class="col-md-4">
    @Html.TextBoxFor(m => m.EmployeeName)

 </div>

 <input type="submit" value="Save" />

 </div>
}

< Сильный > контроллер

 public ActionResult Index()
    {
        Test objTest= new Test();
        objTest.EmployeeName = "Test";
        return View(objTest);
    }
  public ActionResult Save(Test obj)
    {
        return View("About");
    }

< Сильный > Model

 public class Test
{
    public string EmployeeName { get; set; }
}

Выполните то же самое, чтобы реализовать привязку модели

2
user1756922 25 Сен 2018 в 13:37

Итак, вы спросили о многих вещах, которые, я думаю, я понял, но я не уверен, все ли понял.

Сначала вам нужно установить @model в верхней части страницы бритвы, чтобы бритва понимала, какую модель вы используете.

Во-вторых, если вы хотите выполнить действие POST, вы должны иметь такой код:

@Html.BeginForm(){
enter code here
}

Вы можете поместить скрытый ввод с помощью @Html.HiddenFor(model => model.service)

И последнее, что я понял из того, что вы спрашивали, - это стили.

Каждый Html.HiddenFor или Html.TextBoxFor имеет необязательное значение конструктора объекта htmlAttributes. Вы можете использовать это для передачи стиля тегам, например:

@Html.TextBoxFor(txt => txt.name, new { @class= "textbox"})
1
user3489204 24 Сен 2018 в 23:44