0

古い PHP プログラムを ASP 形式にリファクタリングして C#/MVC 4 を学習しています。このプログラムの目的は、基本的なクライアント情報を含む、クライアントの予定のカレンダー エントリを作成することです。私の最近の課題は、ページ上の複数の @Html.DropDownLists に静的データをロードすることでした。これ ( MVC Html.DropDownList() に項目の静的リストを追加する方法) とそれ (この ASP.NET MVC SelectList を機能させるにはどうすればよいですか? )をハッキングした後、これを達成することができましたが、車輪の再発明...

モデルの一部: (CommonDataModel.cs)

public class apptCounties{
  public IEnumerable<SelectItemList> Counties {get; set;}
  public apptCounties()
  {
    Counties = new[]
      {
        new SelectListItem{Text="Cook",Value="Cook"},
        new SelectListItem{Text="Dupage",Value="Dupage"},
        new SelectListItem{Text="Lake",Value="Lake"}
      };
  }
}

ビューモデル: (ScheduleDataViewModel.cs)

public class ScheduleDataViewModel {
  public apptClient ClientData {get; set;} 
    /* ^--This is from another model specific to this app - I'm attempting to use   
          "CommonDataModel.cs" to hold multiple lists of static data (Counties, Races, 
           Genders, etc) & then append app-specific data through specialized models. 
           I plan on expanding functionality later. */
  public apptCounties Counties {get; set;}
  public ScheduleDataViewModel()
  {
    ClientData = new apptClient(); 
    Counties = new apptCounties();
  }
}

コントローラー: (ScheduleController.cs)

public ActionResult Schedule()
{
  var model = new ScheduleDataViewModel();
  return View(model);
}

ビューの一部: (Index.cshtml - ScheduleDataViewModel に厳密に型指定)

@Html.DropDownList("Counties", Model.Counties)

あいまいな構文で申し訳ありません - 私のコードは目の前にありません! ビルドおよびテスト時に、少なくとも上記の一般的な考え方が機能していることを確認できます。

もっと単純な手順であるべきことを複雑にしすぎているのではないかと心配しています。ここのすべてのコンストラクターメソッドで実際に正しい軌道に乗っていますか、またはデータベースの利点なしで静的データリストを提供するためのよりエレガントなソリューションを誰かが提案できますか?

4

2 に答える 2

3

リストが静的で、実際のモデルから比較的独立している場合は、これらを別の静的クラスで定義する方が簡単な場合があります。

public static class ListOptions
{
    public static readonly List<string> Counties = ...
}

次にSelectList、ビューで を作成します。

@Html.DropDownListFor(m => m.County, new SelectList(ListOptions.Counties))

適切であれば、これを行うことに本質的に問題はありません。リストがその特定のモデルにのみ関連している場合、はい、それはビューモデル内に属しています。ただし、その場合でも、値が可変でない場合は、単純に静的プロパティにすることについて心配する必要はありません。

SelectListビューでそれ自体を作成することは必然的に悪いことであるという考えには、私は確かに同意しません。結局のところ、モデルとコントローラーは、値が SelectList からのものであることを知る必要はありません。選択されたものだけです。オプションが提示される方法は、ビューの関心事です。

于 2013-05-10T16:45:11.533 に答える
0

大丈夫そうです。多分いくつかの構文上の改善。

アクション

public ActionResult Schedule()
{
    return View(new ScheduleDataViewModel());
}

ビューモデル

// You want class names to be Upper-case
public class ScheduleDataViewModel 
{
    public ApptClient ClientData { get; set; } 
    public ApptCounties Counties { get; set; }

    public ScheduleDataViewModel()
    {
        ClientData = new ApptClient(); 
        Counties = new ApptCounties();
    }
}
于 2013-05-10T16:14:40.610 に答える