如何在剃刀MVC asp.net中组合两个视图模型

时间:2014-06-13 22:09:02

标签: 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;}
    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的值。为什么以及如何将该值存储并在帖子中发送回控制器。

2 个答案:

答案 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);
}

希望这有帮助!!!