Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有类属性的MVC4 Modelbinding_C#_Asp.net Mvc_Model Binding - Fatal编程技术网

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并保存新用户。

啊,我明白了。我曾期待一种不同风格的功能,但我没有意识到我需要一个中间步骤。非常感谢。