MVC 3在一个视图中显示来自不同模型的数据

mar*_*k s 4 asp.net-mvc asp.net-mvc-3

在MVC 3视图中,我想显示单个合同和声明列表,用户将能够创建新的声明.我为Contract和Claims创建了一个不同的视图,我如何合并它们,以便只有一个视图.


达林,

当视图查找两个字符串时,如何传递MyViewModel的实例?

public ActionResult Details(int id)
{
   MyViewModel myView = new MyViewModel ();
   return View(_repository.GetContract(id), myView); 
}
Run Code Online (Sandbox Code Playgroud)

谢谢


我使用的是PartialViews Html,但我没有看到如何将模型作为参数传递.

合同视图@model Portal.Models.Contracts @using Portal.Models

显示数据.

<div>
    @{
      Html.RenderPartial("_Claim", Portal.Models.Contracts); 

    }
</div>
Run Code Online (Sandbox Code Playgroud)

我收到错误CS0119:'Models.Contracts'是'type',在给定的上下文中无效.

数据绑定到此处的合同视图

public ActionResult Details(int id)
{
    return View(_repository.GetContract(id);
}
Run Code Online (Sandbox Code Playgroud)

如何将数据绑定到PartialView _Claim哪个类型IEnumerable<Models.Claims>

Dar*_*rov 6

您可以定义一个视图模型来包装这两个模型:

public class MyViewModel
{
    public Contract Contract { get; set; }
    public Claim[] Claims { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后让您的控制器操作将MyViewModel的实例传递给视图,并在此视图中使用显示模板:

@model MyViewModel

@Html.DisplayFor(x => x.Contract)
@Html.DisplayFor(x => x.Claims)
Run Code Online (Sandbox Code Playgroud)

然后定义ContractClaim模型(~/Views/Shared/DisplayTemplates/Contract.cshtml~/Views/Shared/DisplayTemplates/Claim.cshtml)的显示模板.