将复杂对象从View传递到Controller:一个对象始终为null

时间:2010-11-07 13:46:47

标签: asp.net-mvc-2 viewmodel parameter-passing

我将一个复杂的对象作为Model传递给View作为

alt text

但是当我从View中获取Model时,一个特定的对象总是null,而其他复杂的类型通常会通过

alt text

我的视图是默认的Edit强类型视图

alt text

  

我缺少什么

ModelState 错误说

  

从“System.String”类型到“Julekalender.Database.CalendarInfo”类型的参数转换失败,因为没有类型转换器可以在这些类型之间进行转换。

为什么不我对其他类型也一样? 如何自动转换?


我添加了3个字段(因为T4模板没有附加此类型)但是POST时我仍然为空

下面的绿色框是

字段
<div class="editor-field">
    <%: Html.TextBoxFor(model => model.Calendar.Guid)%>
</div>

alt text


甚至将动作重命名为

[HttpPost]
public ActionResult General2(GeneralInfo model)

给出相同的错误

alt text

1 个答案:

答案 0 :(得分:2)

确保在使用此向导时,在视图中为Calendar对象的每个属性生成输入字段,以便在发布表单时,它们将被发送到控制器操作。我不确定是这种情况(尚未验证向导是否为复杂对象执行此操作,我从未使用过此向导)。

在生成的HTML中,您应该:

<input type="text" name="Calendar.Prop1" value="prop1 value" />
<input type="text" name="Calendar.Prop2" value="prop2 value" />
... and so on for each property you expect to get back in the post action
... of course those could be hidden fields if you don't want them to be editable

更新:

问题来自于你的action方法中有一个名为calendar的字符串变量,以及一个名为Calendar的属性令人困惑的对象。尝试重命名:

[HttpPost]
public ActionResult General2(string calendarModel, GeneralInfo model)

另请不要忘记在视图中重命名。