2010-12-13 3 views
1

私はここで本当に簡単な何かを見逃していることを知っています。私はDALにPOCOクラス(State)を持っていて、MVCアプリケーションでDropDownListにバインドしようとしていますが、それがすべてロードされるとWeddingPhotographer.Models.BusinessObjects.State DropDownListで50回。ここではPOCOクラスからのコードがあります:MVCのDropDownListにバインドする2

public partial class State 
{ 
    public virtual int Key 
    { 
     get; 
     set; 
    } 

    public virtual string StateAbbreviation 
    { 
     get; 
     set; 
    } 

    public virtual string StateName 
    { 
     get; 
     set; 
    } 

} 

ここに私のビジネスオブジェクトからのコードは(軽く用語を使用)

public class State 
{ 
    public int Key { get; set; } 
    public string StateName { get; set; } 
    public string StateAbbreviation { get; set; } 
} 

public class StateList 
{ 
    private static IRepository<WeddingPhotographer.Data.Model.State> states = ObjectFactory.GetInstance<IRepository<WeddingPhotographer.Data.Model.State>>(); 
    static readonly IList<State> stateList = new List<State>(); 

    public static IEnumerable<State> States 
    { 
     get 
     { 
      foreach (WeddingPhotographer.Data.Model.State s in states.GetAll()) 
      { 
       stateList.Add(new State 
       { 
        Key = s.Key, 
        StateName = s.StateName, 
        StateAbbreviation = s.StateAbbreviation 
       }); 
      } 
      return stateList; 
     } 
    } 
} 

その後、私の状態が制御

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<WeddingPhotographer.Models.BusinessObjects.State>" %> 
<%: Html.DropDownList("StatesDropDown", new SelectList(WeddingPhotographer.Helpers.StateList.States,Model))%> 

そして最後にDropDownListコントロールどうやってロードするのですか

<div class="editor-field"> 
    <% Html.RenderPartial("StatesDropDown"); %> 
    <%= Html.ValidationMessageFor(m => m.State) %> 
</div> 
あなたがドロップダウンからアイテムを移入するSelectListItemの列挙を持っている必要があり

私は(そう、まだ右のものを取得しようとMVCは比較的新しい)私はここに簡単な何かが欠けてる知っ

答えて

1

以前に行った変更を元に戻す。静的リストを使用しているため、このコントロールをチャンスごとに何回使用していますか?

リストをロードする前にヌルチェックを行い、リストがヌルの場合は値を追加するだけで問題を解決できます。

+0

私は理解していませんあなたが言っていること – PsychoCoder

+0

リストが* NOT *ヌルかどうかは分かりますか?あなたの選択リストにバインドするときは、選択リストに追加する前にチェックされているので、ヌル項目はありません。 – BenAlabaster

1

public class StateList 
{ 
    private static IRepository<WeddingPhotographer.Data.Model.State> states = ObjectFactory.GetInstance<IRepository<WeddingPhotographer.Data.Model.State>>(); 
    static readonly IList<SelectListItem> stateList = new List<SelectListItem>(); 

    public static IEnumerable<SelectListItem> States 
    { 
     get 
     { 
      foreach (WeddingPhotographer.Data.Model.State s in states.GetAll()) 
      { 
       stateList.Add(new SelectListItem 
       { 
        Text = s.StateName, 
        Value = s.StateAbbreviation 
       }); 
      } 
      return stateList; 
     } 
    } 
} 

<%: Html.DropDownList("StatesDropDown", new SelectList(WeddingPhotographer.Helpers.StateList.States,Model.StateAbbreviation))%> 

状態での作業は、テキストの値と名前の省略形を使用するときに、テキスト/値のためにあなたがしたい任意の値が、一般的な方法を使用することができますが、アプリケーションがして良い仕事かどうそのState Keyを使用すると、それを使用しても問題ありません。

+0

に動作しますが、今この行でNullReferenceExceptionが発生しています_%:Html.DropDownList( "StatesDropDown"、新しいSelectList(WeddingPhotographer.Helpers.StateList.States、Model.StateAbbreviation))%> _ – PsychoCoder

0

@ SyntaxC4のアドバイスを受けて、IEnumerableを使用して戻ってきましたが、私のビューにDropDownListをロードしようとするたびにNullReferenceExceptionが発生していました。私はこのように私のDropDownListコントロールを変更し、それが今のおかげで、私はそれは私が行方不明になったものだと想像完璧

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<WeddingPhotographer.Models.BusinessObjects.State>" %> 
<%: Html.DropDownList("StatesDropDown", new SelectList(WeddingPhotographer.Helpers.StateList.States, "Key", "StateAbbreviation"))%> 

メールであなたの助けのためのSyntaxC4と@BenAlabaster @おかげだけでなく

関連する問題