【问题标题】:How to maintain correct model binding behaviour when passing model property to partial view?将模型属性传递给局部视图时如何保持正确的模型绑定行为?
【发布时间】:2012-05-31 12:04:51
【问题描述】:

在 ASP.NET MVC 中,我想重用一组常用的信用卡字段,方法是将它们放在部分视图中,然后在父视图的另一个表单中呈现该部分视图。

问题是,如果 CreditCard 对象是模型的一部分,它本身就是一个复杂的对象,当我将它传递给部分视图时,在表单提交时,字段名称缺少父属性名称前缀,这将允许默认模型绑定器将字段映射到复杂对象的正确属性。

信用卡字段在部分视图中呈现(不正确的行为):

@Html.RenderPartial("~/Views/Pay/CCForm.cshtml", Model.CreditCard ,
 new ViewDataDictionary());

帖子字符串:

PayOption=1&CreditCardNumberPlainText=0000000000000&StartDateMm=03&StartDateYyyy=2008&ExpiryDateMm=03&ExpiryDateYyyy=2017&SecurityCode=111&IssueNumber=1&X-Requested-With=XMLHttpRequest

标准形式(正确行为),其中信用卡字段在主视图中呈现,字段如下:

@Html.TextBoxFor(x => x.CreditCard.IssueNumber, new {@maxlength = 3, @size = 3})

帖子字符串:

PayOption = 1&CreditCardInfo.CreditCardNumberPlainText = 0000000000000000&CreditCardInfo.StartDateMm = 02&CreditCardInfo.StartDateYyyy = 2009&CreditCardInfo.ExpiryDateMm = 04&CreditCardInfo.ExpiryDateYyyy = 2014&CreditCardInfo.SecurityCode = 111&CreditCardInfo.IssueNumber = 1&X-请求-随着= XMLHttpRequest的 P>

【问题讨论】:

    标签: asp.net-mvc partial-views model-binding mvc-editor-templates


    【解决方案1】:

    为什么不为这个 CreditCard 类创建一个 EditorTemplate,然后在你的父视图中使用它

    E.G.

    EditorTemplate: CreditCard.cshtml in EditorTemplates 文件夹中 Shared 文件夹中 在此文件中添加 CreditCard 的编辑字段。像这样的:

    @Html.EditorFor(x => x.IssueNumber)
    //........... So on.
    

    那么在您看来,只需调用:

    @Html.EditorFor(x => x.CreditCard)
    

    【讨论】:

    • 谢谢,喜欢简单的回答。之前看过 EditorFor 助手,但还没有完全掌握用例。在这里找到了一个很好的指南:coding-in.net/asp-net-mvc-3-how-to-use-editortemplates
    • 希望我明白这将如何创建不同的表单名称属性,以便绑定可以在服务器上工作......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2019-02-01
    相关资源
    最近更新 更多