Параметр MVC Controller для элемента формы с точкой в ​​нем? - PullRequest
12 голосов
/ 03 октября 2010

Если вы используете методы типа Html.TextBoxFor(), вы можете в конечном итоге получить элементы управления Form, в именах которых есть точки, например:

<input type="text" name="Contact.FirstName" id="Contact_FirstName" />

Если вы хотите, чтобы MVC отображал эти именованные поля на параметры вашего контроллера (в отличие от параметра объекта или чего-либо еще), вы должны правильно определить имена параметров. Что делать с точками?

Ни то, ни другое:

[HttpPost]
public ActionResult FooAction(string firstName)

не это:

[HttpPost]
public ActionResult FooAction(string contact_FirstName)

похоже, работает.

Редактировать: Работать с подходящим параметром объекта (например, см. Ответ clicktricity ), но я ищу способ сделать это с параметрами именованных значений.

Ответы [ 3 ]

17 голосов
/ 06 октября 2010

Я нашел другой способ, своего рода хак, потому что я считаю, что это неправильное использование BindAttribute , чтобы связать firstName с Contact.FirstName входным элементом :

[HttpPost]
public ActionResult FooAction([Bind(Prefix="Contact.FirstName")]string firstName)

Это наверняка работает с ASP.NET MVC 1.

4 голосов
/ 05 октября 2010

Как подсказывает Clicktricity в комментариях, вы можете использовать

[HttpPost]
public ActionResult FooAction(FormCollection form)
{
    firstName = form["Contact.FirstName"];
}
4 голосов
/ 04 октября 2010

В зависимости от других элементов управления формы у вас должна быть возможность, чтобы механизм связывания моделей MVC по умолчанию создавал для вас объект Contact.Тогда подпись вашего метода действия будет:

[HttpPost]
public ActionResult FooAction(Contact contact)

Тогда Contact.FirstName (и любые другие поля) будут связаны правильно

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