2012-04-11 11 views
0

Ich habe eine Webanwendung in mvc3 erstellt und zwei Teilansichten erstellt mit Steuerelementen wie Dropdownliste. zweite Webgrid, die Daten aus der Datenbank zeigt.Das in das Wörterbuch übergebene Modellelement ist vom Typ 'erfordert ein Modellelement des Typs' System.Collections.Generic.IEnumerable '

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); 

     } 

Wie kann ich Webgrid zeigen und Dropdown mit demselben Index() bevölkern ??

bekommen Fehler :( was 2. Parameter innerhalb @ Html.Partial(), so dass beide Gitter und die Steuerung funktioniert auf derselben Seite sein sollte.?

+0

Alle MVC Experten im Hause plz gibt mir einen Tipp? – Neo

+0

Welcher Typ ist das Modell der aktuellen Seite? – Tuan

+0

IEnumerable Neo

Antwort

1

Sie passieren ein SecurityIdentifierMapping Modell zum Index Ansicht. Im Inneren dieser Index Ansicht Sie anrufen 2 partials:

@Html.Partial("_ControlsPartial") 

und:

@Html.Partial("_WebGridPartial") 

Die erste arbeitet f ine, weil es stark auf SecurityIdentifierMapping typisiert ist, aber das zweite (das mit dem Gitter) funktioniert nicht, weil es stark auf IEnumerable<SecurityIdentifierMapping> getippt wird. Also die Ausnahme die du bekommst.

Ich würde Ihnen empfehlen, ein Ansichtsmodell zu verwenden, das 2 Eigenschaften enthalten wird: eine einfache SecurityIdentifierMapping, die Sie an die erste partielle und eine IEnumerable<SecurityIdentifierMapping> Eigenschaft übergeben können, die Sie an die zweite Teil übergeben werden. Es ist die Controller-Aktion, die diese Ansicht Modell füllen und an die Index-Ansicht übergeben:

Index.cshtml:

@model MyViewModel 

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

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

1.Was ist "Model.Identifiers"? und 2.welche @ Model-Anweisungen sollte ich auf zwei Teilansichten und innerhalb index.cshtml verwenden? 3.wash über Index() Methode sollte ich es so halten wie es ist? Wie kann ich wählen, um Webgrid-Daten anzuzeigen? – Neo

+0

'Bezeichner' ist eine Eigenschaft in Ihrem Ansichtsmodell vom Typ' IEnumerable '. 2. In den Teilansichten könntest du das gleiche @model behalten, das du gerade hast. Innerhalb von 'Index.cshtml' können Sie' @model MyViewModel' verwenden, wie in meiner Antwort gezeigt. 3. Da das Partial, das das WebGrid enthält, stark in 'IEnumerable eingetippt ist, können Sie das Modell direkt als Datenquelle für das Grid verwenden. Alles, was übrig bleibt, ist, dass Ihre Controller-Aktion das Ansichtsmodell instanziiert und die 2 Eigenschaften auffüllt, d. H. Die von Ihrer Ansicht benötigten Daten vorbereitet. –

+0

innerhalb index.cshtml in Index() Methode mache ich View (dbContext.SecurityIdentifierMappings.ToList()) die gibt mir Fehler: Das Modell Element in das Wörterbuch übergeben ist vom Typ 'System.Collections.Generic.List '1 [Mapping.Models.SecurityIdentifierMapping] ', aber dieses Wörterbuch benötigt ein Modellelement vom Typ' System.Collections.Generic.IEnumerable '1 [Mapping.Models.SecurityIdentifierMappingViewModel]'. – Neo

Verwandte Themen