Избегание префикса ID и имени на входных элементах при привязке к вложенной части модели в ASP. NET MVC - PullRequest
0 голосов
/ 06 августа 2020

В ASP. NET MVC (5.x, не Core), у меня есть страница CS HTML, где модель содержит вложенный объект, для которого у меня есть элементы управления вводом, аналогичные:

@Html.TextBoxFor(model => model.Order.CustomerName)

Сделано таким образом, ASP. NET добавляет к атрибутам id и name тега ввода префиксы «Порядок», на:

<input id="Order_CustomerName" name="Order.CustomerName" type="text" value="...">

Префиксы портят форму Почта. Я могу заставить имя и идентификатор быть просто CustomerName, выполнив:

@Html.TextBoxFor(model => model.Order.CustomerName, new { id = "CustomerName", name = "CustomerName" })

, но неудобно делать это для каждого элемента управления вводом.

Я мог бы переместить все поля ввода в партиал и вызвать его с Model.Order в качестве модели, но разделение содержимого имеет некоторые недостатки в моем сценарии.

Есть ли способ указать использование Model.Order в качестве модели для всех элементов управления внутри форма или раздел страницы? Что-то вроде следующей вымышленной директивы:

@useModel(Model.Order) {
    @Html.TextBoxFor(model => model.CustomerName)
}

1 Ответ

0 голосов
/ 08 августа 2020

На основании ваших комментариев вы пытаетесь передать сложную модель из представления в контроллер. Это работает отлично, но вы должны указать в контроллере, чего ожидать. Допустим, у вас есть модель

public class Purchase
{
    public Order Order { get; set; }
}

Вы указываете бритве отображать поле для Order => CustomerName

@Html.TextBoxFor(model => model.Order.CustomerName)

В вашей форме html это отображается как:

<input id="Order_CustomerName" ...>

Теперь при отправке в контроллер вы должны указать контроллеру, как обрабатывать запрос, поэтому:

public ActionResult RegisterPurchase([Bind(Prefix = "Order")]Order objOrder)
{
}

Если вы просто добавите в свой контроллер

public ActionResult RegisterPurchase(Purchase objPurchase)
{
}

Ваш объект Order будет быть нулевым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...