0

ドロップダウンリストに次のコードを入力します。次のように「値の選択」という項目を追加する方法はありますか?

private void PopulateCustStatus()
{
     ViewData["custStatus"] = new HEntities().COptions
         .Select(e => new ConfOptModel
             {
                 OptID = e.OptID,
                 OptName = e.OptName,
                 ConfigTypeID = e.ConfigTypeID
             })
         .Where(e => e.ConfigTypeID == 2)
         .OrderBy(e => e.OpName);
}
4

2 に答える 2

0

オブジェクトのリストを返すConfOptModelので、「選択された」値を示すプロパティがない限り、それはできません。

ビュー専用のモデルを作成しない場合(つまり、ドメインオブジェクトを「ViewModel」ではなく「Model」として使用する場合)、通常、選択したアイテムをビューステートに追加します。

ViewData["selectedCustStatus"] = selectedID;

そして、マークアップでDropDownListを作成するときに、その値を使用します。

SelectListItemもう1つのオプションは、domain()オブジェクトの代わりにオブジェクトのリストを返すことConfOptModelです。これにより、ビューロジックの一部がコントローラーに配置されるため、使いやすい方を使用してください。

于 2012-10-30T15:57:51.040 に答える
0

あなたがやろうとしていることの問題は、あなたの「選択なし」オプション(例えば「値の選択」)がで作成されているモデルと同じ「形」を持っていないことだと思いますPopulateCustStatus()

あなたはおそらく使用したいでしょうIEnumerable<SelectListItem>:-

var selectList =
  new HEntities().COptions
    .Where(e => e.ConfigTypeID == 2)
    .OrderBy(e => e.OpName)
    .Select(e => new SelectListItem()
    {
      Text = e.OptName,
      Value = e.OptID,
      Selected = false 
    });

これにより、柔軟性が少し向上します。次に、次のように「値の選択」項目を上に挿入できます。-

var noSelection = new SelectListItem()
{
  Text = "Select value",
  Value = 0,
  Selected = true
};

ViewData["selectedCustStatus"] =
  new[] { noSelection }.Concat(selectList);

注:以前に選択した値を保持する場合は、その値を関数に渡し、マッチングでプロパティSelectListItemがに設定されていることを確認する必要があります。Selectedtrue

お役に立てれば!

于 2012-10-31T07:21:56.500 に答える