我的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.IsValid
是false
- 这是因为Client
模型创建的User
没有Name
是必须的。快速修复:也输入名称并返回它。
这会通过验证,我可以在代码中正确检索Client
并将其分配给我的User
并保存新的User
yada yada ......
我确信这不是一个奇怪的,一次性的风格设置。必须采用“正确”的方式来做到这一点,而不是我目前正在做的捏造。
1)我如何“正确”提供/保留我要将新Client
分配到的User
?
2)如果上述情况不可能,那么最好的方法是什么?我目前将Client.Id
存储在User.Client.Id
字段中,而不是使用[Bind(Exclude="Client")]
,这会从Client
绑定中完全删除User
,我不是确定如何传递Client
数据并验证所有数据。
谢谢。
答案 0 :(得分:0)
如果您使用的是View Models而不是直接将实体传递给视图,那么这不会成为问题。
使用View Models的一个原因是您的视图与数据模型的要求不同。在这种情况下,您根本不需要视图中的客户端信息(除非您在某处显示)。您只是创建一个新用户,当您发布视图模型时,您将根据提交的信息创建一个新实体。此时,您只需分配ClientID并保存新用户。