【问题标题】:MVC Model Binding LimitationMVC 模型绑定限制
【发布时间】:2010-10-17 09:36:20
【问题描述】:

我有一个关于 MVC 中的模型绑定的问题

假设我有一个像下面这样的简单 POCO。

public class Person
{
    public Title Title { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public bool LeadPassenger { get; set; }
}

我有一个控制器,它将一组 Persons 传递给一个 View,我想在该 View 中呈现一个单选按钮,以允许用户从 Persons 集合中选择 LeadPassenger。

现在,要使其正常工作(一次只能选择一个单选按钮),所有“LeadPassenger”单选按钮必须具有相同的名称。但这似乎是不可能使用模型绑定约定的,其中每个控件都以集合中项目的每个属性命名。

<input id="Passengers_0_LeadPassenger " name="PolicyMembers[0].LeadPassenger" type="radio" value="true" />
<input id="Passengers_1_LeadPassenger " name="PolicyMembers[1].LeadPassenger" type="radio" value="false" />

如何绕过这个限制?我可以使用 jQuery 强制所有单选按钮在被选中时关闭,但这似乎是一种“软糖”!

有什么想法吗?

【问题讨论】:

  • 如果您使用Html.RadioButton(),这将自动为您完成。 :)
  • 嗨,bzlm。你是对的。但是,如果我使用 Html.RadioButton(),那么在提交表单时,我不会获得 Person 对象上 LeadPassenger 属性的模型绑定。

标签: asp.net-mvc binding model


【解决方案1】:

这里的诀窍是您尝试完成的任务并不是模型绑定的真正东西,模型绑定并没有真正意识到它的“行”之外的数据可以这么说。您在这里要做的是为主要乘客选择引入一个新字段,将值绑定到人员的唯一标识符,并将名称绑定到同一事物。然后在控制器中将其作为单独的变量提取并从那里映射。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    相关资源
    最近更新 更多