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值与客户端输入的值不符。