【问题标题】:UpdateModel prefix - ASP.NET MVCUpdateModel 前缀 - ASP.NET MVC
【发布时间】:2008-12-07 12:27:05
【问题描述】:

TryUpdateModel() 有问题。我的表单字段以前缀命名,但我使用 - 作为分隔符,而不是默认点。

<input type="text" id="Record-Title" name="Record-Title" />

当我尝试更新模型时,它没有得到更新。如果我将 name 属性更改为 Record.Title 它可以完美运行,但这不是我想要做的。

bool success = TryUpdateModel(record, "Record");

是否可以使用自定义分隔符?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    另外需要注意的是,前缀是为了帮助反射找到要更新的正确字段。例如,如果我的 ViewData 有一个自定义类,例如:

    public class Customer
    {
        public string FirstName {get; set;}
        public string LastName {get; set;}
    }
    
    public class MyCustomViewData
    {
        public Customer Customer {get; set;}
        public Address Address {get; set;}
        public string Comment {get; set;}
    }
    

    我的页面上有一个文本框

    <%= Html.TextBox("FirstName", ViewData.Model.Customer.FirstName) %>
    

    <%= Html.TextBox("Customer.FirstName", ViewData.Model.Customer.FirstName) %>
    

    这是有效的

    public ActionResult Save (Formcollection form)
    {
        MyCustomViewData model = GetModel(); // get our model data
    
        TryUpdateModel(model, form); // works for name="Customer.FirstName" only
        TryUpdateModel(model.Customer, form) // works for name="FirstName" only
        TryUpdateModel(model.Customer, "Customer", form); // works for name="Customer.FirstName" only
        TryUpdateModel(model, "Customer", form) // do not work
    
        ..snip..
    }
    

    【讨论】:

    • 你可以简单地将第二个例子改为:
    【解决方案2】:

    除非您实现自己的 ModelBinder,否则不会。如果您查看www.codeplex.com/aspnet 上的 DefaultModelBinder 的源代码,您会发现当您指定前缀时,它通过连接前缀、句点和属性名称来构造名称。不幸的是,执行此操作的 DefaultModelBinder 上的方法是私有静态的,因此不能在派生类中被覆盖。

    【讨论】:

      【解决方案3】:

      那是使用期间的错误决定。下划线会更好。

      这意味着您必须单独定义所有 ID。

      即。文本框现在有 Html.TextBox("test.test", new{@id="test")

      【讨论】:

        【解决方案4】:

        有理由不使用 .作为 HTML bcs 中的 ID/名称,它不是标准的。例如,如果目标中有一个点,就会中断。

        【讨论】:

        • 下划线用于 HTML/CSS ID。点仅用于表单输入名称。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-26
        • 2010-12-14
        相关资源
        最近更新 更多