模型绑定器如何处理Readonly&残

时间:2013-08-07 13:16:22

标签: asp.net-mvc modelbinder

我有以下两个项目,一个是readonly: -

@Html.TextBoxFor(model => model.Technology.Tag, new 
        { @readonly = "readonly" })

另一个是残疾人: -

@Html.DropDownListFor(model => model.Customer.NAME, ((IEnumerable<TMS.Models.AccountDefinition>)ViewBag.Customers).Select(option => new SelectListItem
{
    Text = (option == null ? "None" : option.ORG_NAME),
    Value = option.ORG_NAME.ToString(),
    Selected = (Model != null) && (Model.Customer != null) & (option.ORG_NAME == Model.Customer.NAME)
}), "Choose...", new { disabled = "disabled" })

asp.net mvc模型绑定器绑定两个项目也是如此? ,还是会忽略任何只读和禁用的字段?

2 个答案:

答案 0 :(得分:1)

它会绑定它们,但只要你用正确的数据填充它们,那就不重要了。此外,您可以将代码映射到实体,假设您使用的是视图模型,只需忽略有问​​题的值即可。假设这是表单中的标准HTTP Post,HTTP不会发布禁用或只读字段,这意味着它们将为null或模型中的默认值,因此您需要考虑到这一点。

如果您希望活页夹忽略这些值,请使用TextBoxDropDownList,并确保它们的名称与您的属性不同。如果您不使用“For”,则需要在视图中添加代码以设置值。

答案 1 :(得分:0)

ReadOnly文本字段被绑定。

我一直试图找到解决价值的未绑定下拉框的方法。这就是我想出的:

 $('#xxx').change(function() {$(this).val(lastSel_xxx);}); 
var lastSel_xxx = $("#xxx option:selected").val();

对视图中的每个HTML元素使用上面的代码(这将要求您记录每个ID输出)并替换&#39; xxx&#39;使用元素名称。

当用户选择除初始选项之外的其他选项时,它将恢复为原始选项。

HOpe这有帮助!