2013-09-24 4 views
2

Я использую перегрузку 10 из BeginForm(), где параметры являются:Передача сложного объекта с видом в контроллер

  1. Строка ActionName
  2. Строка controllerName
  3. объект routeValues ​​метод
  4. FormMethod

Я положил свою модель, которая представляет собой сложный объект, ранее переданный от t он контроллер к виду, в третьем параметре. Однако, у меня есть ошибка компиляции:

CS1928: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'BeginForm' and the best extension method overload 'System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper, string, string, object, System.Web.Mvc.FormMethod)' has some invalid arguments

Есть ли способ отправить сложный объект с точки зрения контроллера?


Edits:

Моя модель:

public xxxModel 
{ 
    public string Name { get; set; } 
    public Adddress Address { get; set; } 
} 

мой взгляд:

@model namespace.xxxModel 
... 
@using (Html.BeginForm("actionName", "controller", Model, FormMethod.Post) { ..... 
+1

Вы можете разместить свой код для BeginForm()? – Andrew

ответ

4

Вы не можете поместить свой класс модели внутри RouteValues ​​Params.

Посмотрите на MSDN help
Как указано в помощь:

routeValues ​​
Тип: System.Object
Объект, содержащий параметры маршрута. Параметры извлекаются путем отражения путем изучения свойств объекта. Этот объект обычно , созданный с использованием синтаксиса инициализатора объекта.

использовать это то

new { MyProp1 = Model.Prop1, MyProp2 = Model.Prop2, MyProp3 = Model.Prop3, ... } 

В противном случае используйте скрытые поля внутри формы. ModelBinder будет отображать их на вашей модели во время поста

+0

Я вижу. Таким образом, он ограничивается простыми парами ключ/значение? –

+1

Да. Лично я иду со скрытыми полями, когда есть много параметров для прохождения – Iridio

0

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

@using(Html.BeginForm("actionName", "Controller", FormMethod.Post) 
{ 
    @Html.TextBoxFor(m => m.Name) 
    @Html.TextBoxFor(m => m.Address) 
} 

Ваше действие будет принять модель, как параметр.

** Примечание: Если форма в связи с действием, что в настоящее время размещен, вы можете сделать:

@using(Html.BeginForm()) 
{ 
    ... 
} 
Смежные вопросы