Asp.net mvc 发布包含在其他ViewModel asp.net mvc中的ViewModel
我有一个ViewModel,其中包含两个其他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(
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-你教了我一些新东西。我从来不知道[绑定(前缀)]。这就是我爱你的原因