C# 具有类属性的MVC4 Modelbinding
我在C# 具有类属性的MVC4 Modelbinding,c#,asp.net-mvc,model-binding,C#,Asp.net Mvc,Model Binding,我在客户端s上设置了用户s 简单地说,客户端只有一个 [Required] public string Name { get; set; } 而用户在其属性中有一个 [Required] public virtual Client Client { get; set; } 在创建Users时,Users是在特定的Clients下创建的(显然) 因此:在我的Usercreate页面中,我将ClientId扔到Viewbag中,这样我就可以将它与User一起发送到我的creating cont
客户端
s上设置了用户
s
简单地说,客户端
只有一个
[Required]
public string Name { get; set; }
而用户
在其属性中有一个
[Required]
public virtual Client Client { get; set; }
在创建User
s时,User
s是在特定的Client
s下创建的(显然)
因此:在我的User
create页面中,我将Client
Id扔到Viewbag中,这样我就可以将它与User
一起发送到我的creating controller
我遇到的第一个问题是Modelstate.IsValid
是false
——这是因为用户创建的客户机没有所需的名称。快速修复:同时输入名称并返回该名称
这通过了验证,我可以在代码中正确地检索客户端
,并将其分配给我的用户
,并保存新的用户
yada yada
我相信这不是一个奇怪的,一次性的设置。要做到这一点,必须有一个“正确”的方法,而不是我目前所做的胡说八道
1) 我如何“正确”提供/保留要分配给新用户的客户端
2) 如果上述方法不可行,那么最好的方法是什么?我目前将Client.Id
存储在User.Client.Id
字段中,并且没有使用[Bind(Exclude=“Client”)]
,这将从User
绑定中完全删除Client
,我不知道如何传递Client
数据并对其进行验证
谢谢。如果您使用的是视图模型,而不是将实体直接传递给视图,则这不会是一个问题
使用视图模型的原因之一是视图的需求与数据模型不同。在这种情况下,您根本不需要视图中的客户机信息(除非您在某处显示)。您只是在创建一个新用户,发布视图模型时,您将根据提交的信息创建一个新实体。此时,您只需分配ClientID并保存新用户。啊,我明白了。我曾期待一种不同风格的功能,但我没有意识到我需要一个中间步骤。非常感谢。