【问题标题】:MVC model binding naming convention for child objects?子对象的 MVC 模型绑定命名约定?
【发布时间】:2011-06-07 18:47:09
【问题描述】:

当有子属性时,我在使用默认模型绑定命名约定时遇到问题。例如:

我有一个看起来像这样的 ViewModel:

public class UserViewModel
{
    public User BusinessObject { get; set; }
}

我的用户类有一个名为“NetworkLogin”的属性

我的视图有这样的东西: model.BusinessObject.NetworkLogin)%> model.BusinessObject.NetworkLogin)%> 自动填充

而我的控制器,我想做的是

    [HttpGet]
    public ActionResult UserIndex(string networkLogin) { }

问题: 输入参数“networkLogin”始终为空。这是有道理的,因为 html 元素上的实际参数是 name="BusinessObject.NetworkLogin" 和 id="BusinessObject_NetworkLogin"。但是,我不知道应该在我的操作方法中使用什么参数名称。我已经尝试过“businessObject_NetworkLogin”,但它也不起作用。

但是,我有这个可行的解决方法,但我不喜欢它。我将此添加到我的 ViewModel 中:

    public string NetworkLogin
    {
        get
        {
            if (BusinessObject == null)
                BusinessObject = new User(); 
            return BusinessObject.NetworkLogin;
        } 
        set
        {
            if (BusinessObject == null)
                BusinessObject = new User();
            BusinessObject.NetworkLogin = value;
        }
    }

我的视图页面现在改为这样。 model.NetworkLogin)%>

有人可以告诉我默认模型绑定的正确命名约定是什么,这样我就不必采用上述解决方法了吗?

谢谢!

【问题讨论】:

    标签: asp.net asp.net-mvc-3 naming-conventions model-binding


    【解决方案1】:

    指明前缀,以便模型绑定器知道BusinessObject.NetworkLogin 查询字符串参数实际上是指networkLogin,这是您用作操作参数的内容

    public ActionResult UserIndex(
        [Bind(Prefix = "BusinessObject")] string networkLogin
    ) 
    { 
        ...
    }
    

    或重用您的视图模型:

    public ActionResult UserIndex(UserViewModel model) 
    { 
        // TODO: use model.BusinessObject.NetworkLogin
        // which is gonna be correctly bound here
        ...
    }
    

    就您的解决方法而言,一旦您将我的两个建议之一付诸实施,您的视图模型属性应该如下所示:

    public string NetworkLogin { get; set; }
    

    【讨论】:

    • 这看起来应该可行,但我决定改用一些 ajax 调用,所以我没有准备好我的项目来尝试上述方法。
    • +1 为 Darin 提供看起来不错的答案。 Raymond,您至少可以在旧版本上尝试一下。
    猜你喜欢
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多