描述

我有一个付款页面,其中包括用于输入银行帐户信息的表格。我已经将银行帐户信息封装到模型 /编辑器模板中。该页面本身具有其自己的视图模型,恰好包含要传递给编辑器的BankAccount属性。

[查看模型]

public class PaymentPageModel { 
    public SomeProperty1 { get; set; }
    public SomeProperty2 { get; set; }
    public BankAccount BankAccount { get; set; }
    ...
}

public class BankAccount { 
    public int BankAccountTypeID { get; set; }
    public string BankName { get; set; }
    public string ABACode { get; set; }
    public string AccountNumber { get; set;}
    public IEnumerable<SelectListItem> BankAccountTypes {
        get { ... // Constructs the list }
    }
}

[付款页HTML]

<% using (Html.BeginForm()) { %>
<%: Html.EditorFor(m => m.BankAccount) %>
    ... // Other miscellaneous stuff not related to the actual BankAccount
<% } %>

[编辑模板

...
<%: Html.DropDownListFor(m => m.BankAccountTypeID, Model.BankAccountTypes) %>
...

问题

最初,当我直接将付款页面直接纳入BankAccount模型时,这很好。下拉列表被正确填充,并且选择了模型的正确值。

我最近修改了该页面,将其强烈地投入到PaymentPageModel上,其中包含BankAccount模型作为属性。 HTML尚未修改。现在的结果是,除了下拉列表外,编辑器模板中的所有HTML值都被正确填充。它正在从bankAccountTypes选择列表中正确地绑定值列表,但是所选值没有被绑定。我已经检查了以确保它应该绑定的值通过将其直接输出在下拉列表旁边来正确设置。

这让我发疯,使我真正质疑模型绑定和HTML帮助者的可靠性,尤其是如果我无法将复杂的视图模型与编辑模板相结合以封装演示/功能。

任何建议都非常感谢。

有帮助吗?

解决方案

如果您强烈键入编辑模板 PaymentPageModel 在您的主要视图中,而不是:

<%: Html.EditorFor(m => m.BankAccount) %>

您可以尝试:

<%: Html.EditorForModel() %>

在您的编辑模板中:

<%: Html.DropDownListFor(m => m.BankAccount.BankAccountTypeID, 
    Model.BankAccount.BankAccountTypes) %>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top