【问题标题】:MVC3: EditorFor Behavior for a Boolean VariableMVC3:布尔变量的 EditorFor 行为
【发布时间】:2011-09-13 12:27:03
【问题描述】:

我注意到使用 EditorFor 方法创建的复选框总是伴随着每个创建的复选框,并且它的值始终设置为 FALSE。我在这里阅读了一些关于此的帖子,并了解需要隐藏输入,否则在 POST 请求期间,对于未选中的框,根本不会发送有关复选框值的信息。 (希望我理解正确)

当我查看来自 POST 请求的表单数据时,我得到一个奇怪的(但预期的)结果,即选中框的值同时为 TRUE 和 FALSE:TRUE 由于选中的框,而 FALSE由于隐藏输入中的值。例如,在我的一个表单上的变量“isActive”上,我在 POST 数据中看到了这一点:

isActive: true
isActive: false

那么,它是什么?既然在为假之前为真,那是否意味着该值将始终为假,因为隐藏字段的值将始终覆盖复选框的值? EditorFor 放置输入元素和隐藏元素(隐藏元素第一个,并且始终设置为 false)的顺序对我来说没有任何意义。有人可以向我解释这背后的逻辑吗?

谢谢!

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    模型编辑器以正确的方式放置它们,这样如果在映射期间选中,输入框的值将覆盖复选框的值。真的不是很神秘吗?

    【讨论】:

    • 这是有道理的,但似乎恰恰相反。复选框首先呈现,然后是隐藏的输入。 POST 数据也按此顺序输出。由于 hidden 始终设置为 false,因此该字段的值似乎最终将始终为 false。除非 true + false = true (1 + 0 =1)...?
    • 我相信对于单个项目,它会获得第一个,所以第二个被忽略。您可以通过在一个页面上为相同的文本输入放置多个编辑器来测试这一点,并查看帖子中使用了哪个值。
    • 默认模型绑定器将忽略非集合类型属性的第一个值之外的其他值。
    • 在这里查看 DefaulModelBinder 的 MVC 源代码aspnet.codeplex.com/SourceControl/changeset/view/70178#266460 我相信它是因为它从模型运行并在请求中找到与名称匹配的属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多