加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 子对象的MVC模型绑定命名约定?

发布时间:2020-12-16 03:57:56 所属栏目:asp.Net 来源:网络整理
导读:当存在子属性时,我遇到了默认模型绑定命名约定的问题.例如: 我有一个ViewModel,它看起来像这样: public class UserViewModel{ public User BusinessObject { get; set; }} 我的User类有一个名为“NetworkLogin”的属性 我的观点有这样的事情: ???????????
当存在子属性时,我遇到了默认模型绑定命名约定的问题.例如:

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

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

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

我的观点有这样的事情:
????????????????
????????????????????<%:Html.LabelFor(model => model.BusinessObject.NetworkLogin)%>
????????????????
????????????????
????????????????????<%:Html.TextBoxFor(model => model.BusinessObject.NetworkLogin)%>
????????????????????自动填写
????????????????
????????????????

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

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

问题:
输入参数“networkLogin”始终为null.这是有道理的,因为html元素上的实际参数是name =“BusinessObject.NetworkLogin”和id =“BusinessObject_NetworkLogin”.但是,我不知道我应该在我的action方法中使用什么参数名称.我尝试过“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;
        }
    }

而我的View页面现在却说明了这一点.
????????????????????<%:Html.TextBoxFor(model => model.NetworkLogin)%>

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

谢谢!

解决方法

指示前缀,以便模型绑定器知道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; }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读