传递到字典中的模型项的类型为'需要类型为'System.Collections.Generic.IEnumerable'的模型项。

时间:2012-04-11 17:03:21

标签: asp.net-mvc asp.net-mvc-3 model-view-controller

我在mvc3中创建了一个Web应用程序,并创建了两个局部视图 一个像dropdownlist这样的控件。 第二个是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>

HomeController.cs
  public ActionResult Index()
        {
            SecurityIdentifierMapping objModel = new SecurityIdentifierMapping();
            objModel.PricingSecurityID = objRepository.GetPricingSecurityID();
            objModel.CUSIP = objRepository.GetCUSIP();
            return View(objModel);

        }

如何显示webgrid并使用相同的Index()填充下拉列表

得到错误:( 什么应该是@ Html.Partial()内的第二个参数,以便网格和控件在同一页面上正常工作。?

1 个答案:

答案 0 :(得分:1)

您正在将SecurityIdentifierMapping模型传递到Index视图。在此索引视图中,您调用了2个部分:

@Html.Partial("_ControlsPartial")

@Html.Partial("_WebGridPartial")

第一个工作正常,因为它强类型为SecurityIdentifierMapping,但第二个(带网格的那个)不起作用,因为它强类型为IEnumerable<SecurityIdentifierMapping>。因此,你得到的例外。

我建议你使用一个包含2个属性的视图模型:一个简单的SecurityIdentifierMapping可以传递给第一个部分,一个IEnumerable<SecurityIdentifierMapping>属性可以传递给第二个部分。控制器操作将填充此视图模型并将其传递给索引视图:

Index.cshtml

@model MyViewModel

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

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