C# 如何在razor MVC asp.net中组合两个视图模型

C# 如何在razor MVC asp.net中组合两个视图模型,c#,asp.net,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,假设我有如下一些模型: public class Model1 { public int ID{get;set;} public string Name{get;set;} } public class Model2 { public int ID{get;set;} public string Name{get;set;} } class CommonViewModel { public string Title{get;set;} pub

假设我有如下一些模型:

public class Model1 
{
   public int ID{get;set;}
   public string Name{get;set;}
}

public class Model2 
{
    public int ID{get;set;}
    public string Name{get;set;}
}

class CommonViewModel 
{
    public string Title{get;set;}
    public Model1 model1;
    public Model2 model2;
}
我的观点如下

@model ProjectName.CommonViewModel

@Html.LabelFor(m => model.Title)           
@Html.EditorFor(m => model.Title)

@Html.LabelFor(m => model.model1.Name)           
@Html.EditorFor(m => model.model1.Name)

在我的控制器上,我有一个以CommonViewModel作为参数的post back。公共视图模型的标题将有一个值,但model1.Name没有。为什么以及如何在post中存储该值并将其发送回控制器。

控制器中需要两种方法:一种用于post,另一种用于get

由于您希望保留存储在模型中的值,因此必须将它们从POST方法传递到GET方法。您还必须在
视图中指定POST。下面是一个关于代码在控制器中应该如何使用的大致概念。我没有试过,所以我只是凭直觉:

[HttpPost]
public ViewResult PostActionMethod(CommonViewModel commonViewModel)
{
   if (ModelState.IsValid)
   {
       //your code follows
   }

   return RedirectToAction("GetActionMethod", commonViewModel);
}

[HttpGet]
public ViewResult GetActionMethod(CommonViewModel commonViewModel)
{
   //your code follows

   return View(commonViewModel);
}

希望这有帮助

您的
CommonViewModel
类存在一些问题。它应该是公共的,model1和model2应该有getter和setter:

public class CommonViewModel
{
    public string Title { get; set; }
    public Model1 model1{get;set;}
    public Model2 model2{get;set;}
}
在视图中,您还需要修复:

@Html.LabelFor(m => m.Title)           
@Html.EditorFor(m => m.Title)

@Html.LabelFor(m => m.model1.Name)           
@Html.EditorFor(m => m.model1.Name)

上面的代码在我的测试中运行良好。

MVC没有“post back”。这是正确的,我没有在代码中包含它。问题在于post返回的model1的commonViewModel值与客户端输入的值不符。