2010-06-05 3 views
1

У меня есть модель представления пользователя, который имеет следующие свойства:Как читать сложную модель вида на POST?

public User user; 
    public List<Language> Languages; 

я посылаю выше модели с точки зрения и использовать HTML хелперов для построения формы, так что я в конечном итоге что-то вроде:

<form action="/Users/Edit/5" method="post"><input id="user_UserId" name="user.UserId" type="hidden" value="5" /> 

Имя

Фамилия
Email

<br /> 
<input id="user_Email" name="user.Email" type="text" value="[email protected]" /> 

Язык
- ан

ан

Теперь, я стараюсь читать POST в чем-то, что изначально было что-то вроде:

[AcceptVerbs(HttpVerbs.Post)] 

общественного ActionResult Edit (INT UserId, форма FormCollection) {

и не может получить переменную user.UserId , user.FirstName variable и т. д.

Любая идея, что нужно сделать, чтобы читать этот запрос POST. Я вроде бы неохотно изменяю свой ViewModel, поскольку он очень прост и удобен в обслуживании.

спасибо.

ответ

0

Видимо легкий ответ использовать префикс, что-то вроде:

public ActionResult Edit([Bind(Prefix="user")] int UserId, FormCollection form) { }

Тем не менее, я все еще получаю от

Словарь содержит параметры a нулевая запись для параметра 'UserId' от не-nullable тип 'System.Int32' для метод 'System.Web.Mvc.ActionResult Edit (Int32, System.Web.Mvc.FormCollection)»

Любая идея, как это исправить?

2

У меня была аналогичная проблема некоторое время назад. Эта статья была полезна: Editing a variable length list

+0

Я, кажется, не понимаю, как применить указанное выше сообщение к моему конкретному случаю. Могу ли я изменить название приведенных элементов ввода? Я использую помощник HiddenFor для UserId. – Interfector

+0

Обратите внимание на «использование (Html.BeginCollectionItem («подарки»). Трюк состоит в том, чтобы окружить вашу коллекцию этим классом-помощником. Это самая важная часть статьи. – pvieira

Смежные вопросы