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

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

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

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

我的观点是这样的:

model.BusinessObject.NetworkLogin)%>


model.BusinessObject.NetworkLogin)%>
自动填充



而我的 Controller ,我想做的是
    [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)%>

有人可以告诉我默认模型绑定(bind)的正确命名约定是什么,以便我不必采用上述解决方法?

谢谢!

最佳答案

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

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

或重用您的 View 模型:
public ActionResult UserIndex(UserViewModel model)
{
    // TODO: use model.BusinessObject.NetworkLogin
    // which is gonna be correctly bound here
    ...
}

就您的解决方法而言,一旦您将我的两个建议之一付诸实践,您的 View 模型属性实际上应该如下所示:
public string NetworkLogin { get; set; }

10-07 12:28