Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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
Asp.net mvc 发布包含在其他ViewModel asp.net mvc中的ViewModel_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 发布包含在其他ViewModel asp.net mvc中的ViewModel

Asp.net mvc 发布包含在其他ViewModel asp.net mvc中的ViewModel,asp.net-mvc,Asp.net Mvc,我有一个ViewModel,其中包含两个其他ViewModel(为简洁起见,已剥离): 然后我有一个视图,它接受BigViewModel作为它的模型。视图有两种形式,分别发布两个不同的操作 @model BigViewModel @using (Html.BeginForm("Action1","Controller",FormMethod.Post)) { @Html.TextBoxFor(t=>t.Model1.Item) } @using (Html.BeginForm(

我有一个ViewModel,其中包含两个其他ViewModel(为简洁起见,已剥离):

然后我有一个视图,它接受
BigViewModel
作为它的模型。视图有两种形式,分别发布两个不同的操作

@model BigViewModel

@using (Html.BeginForm("Action1","Controller",FormMethod.Post))
{
    @Html.TextBoxFor(t=>t.Model1.Item)
}

@using (Html.BeginForm("Action2","Controller",FormMethod.Post))
{
    @Html.TextBoxFor(t=>t.Model2.Item)
}
然后在控制器中,我尝试执行以下操作:

public ActionResult Action1(SmallViewModel1 model)
{
    ....
}

public ActionResult Action2(SmallViewModel2 model)
{
    ....
}

我遇到的问题是,如果我使用“For”控件(EditorFor、TextBoxFor等),我发布的模型为空。我认为这是因为它希望我发布完整的ViewModel(BigViewModel),并且它将需要的输入命名为:
您的控制器应该是这样的

public ActionResult Action1(BigViewModel model)
{
    ....
}

public ActionResult Action2(BigViewModel model)
{
    ....
}
由于您采用了BigViewModel,所以在提交时,它的参数中应该具有相同的模型

或者,您可以使用
BindAttribute

public ActionResult Action1([Bind(Prefix="Model1")]SmallViewModel1 model)
{
    ....
}

public ActionResult Action2([Bind(Prefix="Model2")]SmallViewModel2 model)
{
    ....
}

你的控制器应该是这样的

public ActionResult Action1(BigViewModel model)
{
    ....
}

public ActionResult Action2(BigViewModel model)
{
    ....
}
由于您采用了BigViewModel,所以在提交时,它的参数中应该具有相同的模型

或者,您可以使用
BindAttribute

public ActionResult Action1([Bind(Prefix="Model1")]SmallViewModel1 model)
{
    ....
}

public ActionResult Action2([Bind(Prefix="Model2")]SmallViewModel2 model)
{
    ....
}

您不能这样做。您必须创建
局部视图
并将
小视图模型
传递给它们,这是因为您的生成控件基于
BigViewModel
,因此您需要更改POST方法中的参数以匹配-即
公共操作结果操作1(BigViewModel)
或使用
[Bind(Prefix=“SmallViewModel1”)]
属性不创建部分-如果存在重复的属性名,它将生成无效的html。@CodeNotFound请将其转换为答案,以便我可以接受:)。我知道我错过了一些明显的东西。谢谢@James如果您不想使用BugViewModel,正确的答案是使用Stephen的解决方案:)您不能这样做。您必须创建
局部视图
,并将
小视图模型
传递给它们,这是因为您基于
BigViewModel
生成控件,因此,您需要更改POST方法中的参数以匹配-即
public ActionResult Action1(BigViewModelmodel)
或使用
[Bind(Prefix=“SmallViewModel1”)]
attributed不创建部分-如果存在重复的属性名,则将生成无效的html。@CodeNotFound将其转换为答案,以便我可以接受它。请:)。我知道我错过了一些明显的东西。谢谢@James如果你不想使用BugViewModel,正确的答案是使用Stephen的解决方案:)Op=>“认为这是因为它希望我发布完整的ViewModel(BigViewModel)”我认为,这是成功实现代码的最佳实践和正确方法。!嗯,我认为@Stephen Muecke在问题的评论中给出了正确的答案。@Stephen Muecke-你教了我一些新东西。我从来不知道[绑定(前缀)]。这就是为什么我喜欢Op=>“认为这是因为它期望我发布完整的ViewModel(BigViewModel)”我认为,这是成功实现代码的最佳实践和正确方法。!嗯,我认为@Stephen Muecke在问题的评论中给出了正确的答案。@Stephen Muecke-你教了我一些新东西。我从来不知道[绑定(前缀)]。这就是我爱你的原因