2009-06-24 15 views
0

Meine Viewmodel-Klasse (ItemViewModel.cs) sieht wie folgt aus:Ärger Ansichtsmodell zu Teilansicht vorbei

public class ItemViewModel {

public ItemViewModel(xxx.Product product) 
{ 
    this.product = product; 
} 

private readonly xxx.xxx.Product product; 
private readonly Pers pers; 
private readonly Item item; 

public xxx.xxx.Product Product 
{ 
    get{ return product;} 
} 

public Item Item 
{ 
    get { return item; } 
} 

public ItemList Items 
{ 
    get { return product.Items; } 
} 

public Pers Pers 
{ 
    get { return pers; } 
    set { value = pers; } 
} 

public PersList PersList 
{ 
    get { return product.PersList; } 
} 

}

Der Blick diesen Code hat darin definiert (ich nahm einige andere Falllinien, nur um eines von ihnen als Beispiel zu zeigen):

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/MasterPages/Item.Master" Inherits="System.Web.Mvc.ViewPage<xxx.ViewModels.ItemViewModel>" %> 

    <% foreach (Pers p in Model.Perslist) 
     { 
      switch(p.DispType) 
      { 
       case DisType.Dropdown: 
        Model.Pers = p; 
        Html.RenderPartial("~/Views/Shared/Controls/Custom/PForm/DropDown.ascx",*Model); 
        break; 
      } 
     } 
    %> 

Und die RenderPartial sieht wie folgt aus:

<fieldset> 
    <div class="xxx"> 
     <span class="xxx">*</span><label><%=Model.Pers.Name %></label> 
     <p class="xxx"><%=Model.Pers.Info %></p> 
    </div> 
    <div class="formField"><% Html.DropDownList(Model.Pers.Name, new SelectList(Model.Items[0].DropdownItems));%></div> 
</fieldset> 

Das Problem oder Dilemma ich habe ist, ich nicht nur die p aus dem foreach brauche aber die gesamte ItemViewModel Instanz, die ursprünglich übergeben wurde meine Aussicht. Weil ich das Pers in diesem foreach benutzen muss, sowie in der Lage sein, die Einzelteile zu verweisen. Also habe ich versucht, die Pers-Eigenschaft der ItemViewModel-Klasseninstanz auf das aktuelle p in der foreach zu setzen. Dann habe ich versucht, das ganze Model (jetzt habe ich dieses Pers in der Eigenschaft) vom Typ ItemViewModel zu senden, so dass ich jetzt die Eigenschaft Pers für dieses Objekt verwenden kann und trotzdem auf die Items-Eigenschaft verweisen kann, die bereits gefüllt war wenn es die Ansicht trifft. So

, wenn die Seite rendert erhalte ich:

System.NullReferenceException: Objektverweis nicht auf eine Instanz eines Objekts festgelegt. für diese Linie:

<span class="xxx">*</span><label><%=Model.Pers.Name %></label> 

Ich bin so weit unsuccesful, weil ich noch einen Null-Referenzfehler auf dem Grundstück Pers, wenn ich die ITemViewModel in meiner Teilansicht zu verwenden versuchen.

Antwort

0

Dies könnte, weil Ihre Teilansicht Datei diese Zeile über den html benötigt:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<xxx.ViewModels.**ItemViewModel**>" %> 

So soll dies ist, wie Sie Ihre Teilansicht aussehen:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<xxx.ViewModels.**ItemViewModel**>" %> 
<fieldset> 
    <div class="xxx"> 
     <span class="xxx">*</span><label><%=Model.Pers.Name %></label> 
     <p class="xxx"><%=Model.Pers.Info %></p> 
    </div> 
    <div class="formField"><% Html.DropDownList(Model.Pers.Name, new SelectList(Model.Items[0].DropdownItems));%></div> 
</fieldset> 
+0

eigentlich habe ich das in meiner Teilansicht, den Typ ItemViewModel..forgot hinzuzufügen, dass ich das schon habe. – PositiveGuy

+0

Ich hatte dies am Anfang meiner Teilansicht: <% @ Control Language = "C#" Inherits = "System.Web.Mvc.ViewUserControl "%> – PositiveGuy

0

Guten Gott, habe ich die Eigenschaft falsch. aufgelöst. Duh.

Verwandte Themen