假设我有一些模型如下:
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作为参数。公共视图模型将具有Title的值,但不具有model1.Name的值。为什么以及如何将该值存储并在帖子中发送回控制器。
答案 0 :(得分:4)
您的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)
上面的代码在我的测试中运行良好。
答案 1 :(得分:0)
您的控制器中需要两种方法:一种用于POST,另一种用于GET。
由于您希望保留模型中存储的值,因此必须将它们从POST方法传递给GET方法。您还必须在view
中指定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);
}
希望这有帮助!!!