【问题标题】:Passing Complex object from View to Controller: one object is always null将复杂对象从视图传递到控制器:一个对象始终为空
【发布时间】:2011-05-06 07:15:42
【问题描述】:

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

但是当我从视图中取回模型时,一个特定的对象总是会出现null,而其他复杂类型通常会通过

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

我错过了什么

ModelState错误提示

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

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


我添加了 3 个字段(因为 T4 模板没有附加此类型)但是当 POSTing 时我仍然得到 null

下面的绿色框是字段

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


甚至将动作重命名为

[HttpPost]
public ActionResult General2(GeneralInfo model)

给出同样的错误

【问题讨论】:

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


    【解决方案1】:

    确保当您使用此向导时,视图中会为 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
    

    更新:

    问题在于您的操作方法中有一个名为calendar 的字符串变量,以及一个具有名为Calendar 的属性的对象,这令人困惑。尝试重命名:

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

    别忘了在你的视图中重命名它。

    【讨论】:

    • 我只为 3 个字段 balexandre.com/temp/2010-11-07_1458.png 做了,但我仍然没有得到对象,我需要拥有所有字段吗?
    • 不,单个字段足以实例化对象。啊啊啊我现在明白了。在您的操作方法中重命名此 calendar 变量,因为它与 Calendar 属性混淆。
    • 但这是我的路线"{calendar}/{controller}/{action}/{id}",所以我可以传递一个日历名称(所以我知道所有操作属于哪个日历),例如http://domain/demo/Content/General2 我知道它请求了名为@ 的日历的常规内容987654331@.
    • 这就是问题所在。您只能有一个日历 :-) 作为替代方法,在 GeneralInfo 类中重命名 Calendar 属性。
    • 但是......即使没有它,我也得到了同样的结果:(balexandre.com/temp/2010-11-07_1508.png
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    相关资源
    最近更新 更多