如何在 Index.cshtml MVC3 上显示两个 Partials 视图数据?

Posted

技术标签:

【中文标题】如何在 Index.cshtml MVC3 上显示两个 Partials 视图数据?【英文标题】:How to show two Partials view data on Index.cshtml MVC3? 【发布时间】:2012-04-13 07:03:00 【问题描述】:

我在 mvc3 中创建了一个 web 应用程序并创建了两个局部视图 一个具有控制两个下拉列表。 第二个有 webgrid,它显示来自数据库的数据。

    partialview1.cshtml
    @model Mapping.Models.SecurityIdentifierMapping

    @using (Html.BeginForm("Mapping", "Home"))
    
        @Html.DropDownList("SecurityID", Model.PricingSecurityID, "-- Select SecurityID --")
        <br />    
        @Html.DropDownList("CUSIPID", Model.PricingSecurityID, "-- Select CUSIPID --")
        <br />
        <button type="submit">Map</button>
    

    partialview2.cshtml
    @model IEnumerable<Mapping.Models.SecurityIdentifierMapping>

    @
        ViewBag.Title = "Mapping";
        WebGrid grid = null;
        if (Model.Count() > 0 )
        grid = new WebGrid(source: Model,
                                defaultSort: "Id",
                                canPage: true,
                                canSort: true,
                                rowsPerPage:20);
        
    


    <h2>Mapping</h2>


    @if (grid != null)
    
    @grid.GetHtml(
                    tableStyle: "grid",
                    headerStyle: "head",
                    alternatingRowStyle: "alt",
                    columns: grid.Columns(
                                                grid.Column("", header: null, format: @<text>@Html.ActionLink("Edit", "Edit", new  id = (int)item.id )  @Html.ActionLink("Delete", "Delete", new  id = (int)item.id )</text>),
                                                grid.Column("PricingSecurityID"),
                                                grid.Column("CUSIP")
                                              )

                    )
    
    <br />
    <p>
        @Html.ActionLink("Back", "Index")
    </p>

    in index.cshtml


    <div>
    @Html.Partial("_ControlsPartial",)
    </div>

    <div>
    @Html.Partial("_WebGridPartial")
    </div>

inside Indexcontroller.cs in Index()

     public ActionResult Index()
            
//FOR POPULATE DROPDOWN
                //SecurityIdentifierMapping objModel = new SecurityIdentifierMapping();
                //objModel.PricingSecurityID = objRepository.GetPricingSecurityID();
                //objModel.CUSIP = objRepository.GetCUSIP();
                //return View(objModel);

              //FOR  DISPLAY DATA IN WEBGRID
                return View(dbContext.SecurityIdentifierMappings);
            

这里的问题是webgrid partial view@model IEnumerable&lt;Mapping.Models.SecurityIdentifierMapping&gt;controlpartilview 拥有@model Mapping.Models.SecurityIdentifierMapping

那么我如何创建一个 VIEWMODEL.cs 一个新的类,它将有两个模型,我如何在 INDEX(() 中写入它,以便该方法也将填充下拉菜单并在 WEBGRID 中显示数据?

【问题讨论】:

【参考方案1】:

为什么不创建一个包含两个属性的自定义视图模型类:

public class SecurityIdentifierMappingViewModel

    public IEnumerable<SecurityIdentifierMapping> MappingList get; set; 
    public SecurityIdentifierMapping Mapping get; set; 

然后您可以将此自定义视图模型传递给索引视图和相应的属性作为每个部分的视图模型

编辑

您的索引操作将如下所示:

public ActionResult Index()

    // single mapping
    var mapping = new SecurityIdentifierMapping();
    maping.PricingSecurityID = objRepository.GetPricingSecurityID();
    mapping.CUSIP = objRepository.GetCUSIP();

    var viewModel = new SecurityIdentifierMappingViewModel
    
        Mapping = mapping,
        MappingList = dbContext.SecurityIdentifierMappings.ToList()
    ;

    return View(viewModel);

Index.cshtml:

@model SecurityIdentifierMappingViewModel

<div>
    @Html.Partial("_ControlsPartial", Model.Mapping)
</div>

<div>
    @Html.Partial("_WebGridPartial", Model.MappingList)
</div>

【讨论】:

Stack Overflow is not a Code Writing, Tutorial or Consulting Service

以上是关于如何在 Index.cshtml MVC3 上显示两个 Partials 视图数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据.cshtml中的不同下拉值显示不同的表格?

为啥 ASP.NET MVC3 区域和 Razor 视图会产生此错误?

Index.cshtml 中的有序表布局

如何在 VIEW MVC3 Razor 中显示 webforms 页面 .aspx

将 JSON 对象传递给控制器

ViewModel在MVC3中的应用:一个view显示多个model