具有类属性的MVC4 Modelbinding

时间:2013-02-19 10:13:23

标签: c# asp.net-mvc model-binding

我的Client设置为User s。

简单地说,Client只有一个

[Required]
public string Name { get; set; }

并且User在其属性中有一个

[Required] 
public virtual Client Client { get; set; }

在创建User时,User是在特定Client下创建的(显然)

所以:在我的User创建页面中,我将Client ID投放到Viewbag中,以便我可以通过User将其发送到我的创建控制器。

我遇到的第一个问题是Modelstate.IsValidfalse - 这是因为Client模型创建的User没有Name是必须的。快速修复:也输入名称并返回它。

这会通过验证,我可以在代码中正确检索Client并将其分配给我的User并保存新的User yada yada ......

我确信这不是一个奇怪的,一次性的风格设置。必须采用“正确”的方式来做到这一点,而不是我目前正在做的捏造。

1)我如何“正确”提供/保留我要将新Client分配到的User

2)如果上述情况不可能,那么最好的方法是什么?我目前将Client.Id存储在User.Client.Id字段中,而不是使用[Bind(Exclude="Client")],这会从Client绑定中完全删除User,我不是确定如何传递Client数据并验证所有数据。

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您使用的是View Models而不是直接将实体传递给视图,那么这不会成为问题。

使用View Models的一个原因是您的视图与数据模型的要求不同。在这种情况下,您根本不需要视图中的客户端信息(除非您在某处显示)。您只是创建一个新用户,当您发布视图模型时,您将根据提交的信息创建一个新实体。此时,您只需分配ClientID并保存新用户。