ASP.NET MVC:ヘルパーは、データをつかむために許可されていますか? [閉まっている]

StackOverflow https://stackoverflow.com/questions/881294

  •  22-08-2019
  •  | 
  •  

質問

私のプロジェクトのすべての私のコントローラは、私のエンティティモデルとプロパティを持つベースコントローラから継承します。

レッツは、私は、世界の都市を表示するビューを持っていると言う、それは国によってフィルタリングするためのオプションがあります。国フィルタは、データベースからの国のドロップダウンリストです。ドロップダウンリストのHTMLヘルパーはIEnumerable<SelectItem>を要求します。

その情報を、私はこのようになりますHtmlHelperを作成する場合は、

さて、それはOKです。

    public static IEnumerable<SelectListItem> GetCountries(HtmlHelper htmlHelper)
    {
        return (from c in ((BaseController) htmlHelper.ViewContext.Controller).Entities.Countries
                orderby c.Name
                select new SelectListItem() {Text = c.Name, Value = c.ID});


    }
私が可能であるならば、それは物事のMVCの方法に従ってOKであれば、

質問はありません。 (または私は、コントローラ内部のViewDataの国々のコレクションを入れてください)。

役に立ちましたか?

解決

私はGetCountriesメソッドにパラメータとしてデータを渡すでしょう。 HtmlHelperの機能は本当にあなたのベースコントローラのプロパティについて知るべきではない - 誰かがあなたのベースから継承していないコントローラ上でそれを使用していた場合はどう?私はあなたのコード、何とか何とかを制御する、私が知っている知っています。あなたがベストプラクティスで本当に興味があるなら、依存関係を避けます。

public static IEnumerable<SelectListItem> GetCountries(this HtmlHelper html, Countries countries) {
    return from c in countries
           order by c.Name
           select new SelectListItem 
           {
               Text = c.Name,
               Value = c.ID
           };
}

そして、あなたのビューでます:

<%=Html.GetCountries(this.Entities.Countries)%>

他のヒント

ます。http:// nerddinnerbook

のViewModelパターンをチェックし、それがNerdDinnerチュートリアルで述べています。 s3.amazonaws.com/Part6.htmする

基本的に、あなたはあなたのビューのために必要がある場合がありますすべてのデータをカプセル化するのViewModelクラスを作成します。だから、すべての都市および/または国のリストが含まれているクラスがあり、任意の他、コントローラのアクションに移入/インスタンス化と思います。

次に、あなたは強くあなたのことのViewModelクラスを使用するビュー、およびblammoを入力することができます。あなたはあなたのフォームに必要なすべてのデータを持っている。

私は、HTMLヘルパーがHTMLを返すべきだと思います。 だから、二つのアプローチがあります:

まず、あなたが開始したとして、これを行うにしたい場合は、お使いのHtmlHelperから要素のリストを準備して、初期化されたリストでhtml.RenderDropDownを呼び出し、選択された要素など...

二、あなたはすべてのモデルに準備することができますので、コントローラはあなたにとても必要なすべての要素で開始オブジェクトを渡します、あなたが直接

renderdropdown呼び出すことができます見ます

歓声

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top