2010-11-23 2 views
0

Ich habe ein kleines Problem mit einigen Daten in meiner MVC C# -Anwendung.Objekt enthält keinen Definitionsfehler beim Zugriff auf Dataset in MVC-Ansicht

In der Steuerung habe ich Folgendes, um einen Datensatz zur Verwendung in der Ansicht abzurufen.

public ActionResult Franchisee() 
    { 
     getNav(); 

     var data = (
        from f in DietCenterDB.Franchises 
        join fc in DietCenterDB.FranchiseContents on f.ID equals fc.FranchiseId 
        into ffc 
        from subffc in ffc.DefaultIfEmpty() 
        select new { 
           State = f.State, 
           City = f.City, 
           AccountCode = f.AccountCode, 
           CenterNumber = f.CenterNumber, 
           FranchiseContentId = (subffc == null ? 0 : subffc.FranchiseContentId) } 
        ).ToList(); 

     return View(data); 
    } 

The View hat den folgenden Code

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Content.master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<dynamic>>" %> 

<asp:Content ID="Head" ContentPlaceHolderID="HeadContent" runat="server"> 
</asp:Content> 

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 

    <h1>Franchisee Administration - <%: Html.ActionLink("Add New", "FranchiseeEdit", new { id = 0 }) %></h1> 
    &raquo; <%: Html.ActionLink("Content Management Home", "Index") %> 
    <p></p> 
    <table cellpadding="0" cellspacing="0" width="600px"> 
     <% 
      int counter = 0; 
      string rowClass; 

      foreach (var item in Model) { 
       if ((counter % 2) == 0) 
       { 
        rowClass = "r1"; 
       } 
       else 
       { 
        rowClass = "r2"; 
       } 

       string dataString = item.State + " " + item.City + " " + item.AccountCode + " " + item.CenterNumber; 

     %> 

       <tr class="row <%: rowClass %>"> 
        <td> 
         <%: Html.ActionLink(dataString, "FranchiseeEdit", new { id = item.ID, City = item.City, State = item.State, Zip = item.Zip })%> 
        </td> 
        <td align="right"> 
         <%: Html.ActionLink("Edit Microsite Content", "MicrositeContentEdit", new { id = item.ID, City = item.City, State = item.State, Zip = item.Zip })%> 
        </td> 
       </tr> 


      <% counter++; %> 
     <% } %> 
    </table> 


</asp:Content> 

Wenn ich laufen die App ich folgende Fehlermeldung erhalten

'Objekt' enthält keine Definition für 'Staat' enthalten

Beim Debuggen zeigt der Debugger, dass die Daten tatsächlich im Speicher sind.

Alle Tipps oder Hinweise werden sehr geschätzt !!!

Antwort

1

Ich würde sagen, es ist, weil Sie ein dynamisches View haben, nicht um eine stark typisierte:

Inherits="System.Web.Mvc.ViewPage<IEnumerable<dynamic>>" 

nicht sein das Problem zu sagen, aber die Dinge heikel machen.

Warum Sie nicht Ihre Abfrage in ein Ansichtsmodell projizieren, und binden an, dass:

var data = (
        from f in DietCenterDB.Franchises 
        join fc in DietCenterDB.FranchiseContents on f.ID equals fc.FranchiseId 
        into ffc 
        from subffc in ffc.DefaultIfEmpty() 
        select new MyViewModel { 
           State = f.State, 
           City = f.City, 
           AccountCode = f.AccountCode, 
           CenterNumber = f.CenterNumber, 
           FranchiseContentId = (subffc == null ? 0 : subffc.FranchiseContentId) } 
        ).ToList(); 

Und dann in der Ansicht:

Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyViewModel>>" 

EDIT

MyViewModel ist eine einfache Klasse, die Sie erstellen müssen, die einen leichten Speicher für Ihr Modell ermöglicht:

public class MyViewModel 
{ 
    public int State {get;set;} 
    public int City {get;set;} 
    public int AccountCode {get;set;} 
    public int CenterNumber {get;set;} 
    public int FranchiseContentId {get;set;} 
} 
+0

das ist sinnvoll, aber woher kommt die Klasse viewModel? – dindryte

+0

danke für deine hilfe !!! – dindryte

+0

@dindryte - es ist eine einfache Klasse, die zur Vereinfachung der Modellbindung verwendet wird (siehe Bearbeiten). Es ist eine bekannte Technik in ASP.NET MVC. Lass mich wissen, wie es dir geht. – RPM1984

Verwandte Themen