0

MVC 3 および EF 5 で VS 2010 を使用しています。1 つのインスタンスを除くすべてのインスタンスで正しく機能するドロップダウン リストの一般的なパターンを使用していますが、これが選択リストで正しいエントリを選択できない理由がわかりません。以下はコード スニペットです。

選択リストは次のように作成されます。

   public static IEnumerable<SelectListItem> GetOutcomes()
    {
        CodesEntities dataContextCodes = new CodesEntities(ConnectionString);

        return new SelectList(dataContextCodes.CodeOutcome.
            Where(x => x.DisplayOrder > 0).OrderBy(x => x.DisplayOrder), 
            "OutcomeCodeID", "Outcome");
    }

これにより、正しい選択リストが返されます。

ビューには次のコードがあります。

@Html.DropDownListFor(m => m.OutcomeCodeID,
                PerintalFormViewModels.GetOutcomes(), "Please select an item")

モデル値m.OutcomeCodeIDには有効な値 (1) がありますが、項目が選択されていません。

生成される HTML は次のとおりです。

<select id="CodeID" name="OutcomeCodeID" data-val-required="Outcome is required" data-val-number="The field outcome must be a number." data-val="true">
<option value="">Please select an item</option>
<option value="1">Termination</option>
<option value="2">Loss</option>
<option value="3">Still</option>
<option value="4">Live</option>
</select>

私は髪の毛が引き裂かれ、ナッツの段階に追い込まれています。誰か考えがありますか?

ありがとう

4

2 に答える 2

1

次のように実行できます。

public static IEnumerable<SelectListItem> GetOutcomes(string selectedID)
{
    CodesEntities dataContextCodes = new CodesEntities(ConnectionString);


    return new SelectList(dataContextCodes.CodeOutcome.
        Where(x => x.DisplayOrder > 0).OrderBy(x => x.DisplayOrder), 
        "OutcomeCodeID", "Outcome"
        , selectedID); // add this parameter
}

またはこれ:

public static IEnumerable<SelectListItem> GetOutcomes(string selectedID)
{
    CodesEntities dataContextCodes = new CodesEntities(ConnectionString);


    return        
      dataContextCodes.CodeOutCome
      .Where(x => x.DisplayOrder > 0)
      .OrderBy(x => x.DisplayOrder)
      .ToList()
      .Select(x => new SelectListItem 
      { 
          Value = x.OutcomeCodeID.ToString(),
          Text = x.Outcome.ToString(),
          Selected = x.OutcomeCodeID == selectedID
      });
}

次に、次のように呼び出します。

@Html.DropDownListFor(m => m.OutcomeCodeID,
            PerintalFormViewModels.GetOutcomes(Model.OutcomeCodeID), 
            "Please select an item")
于 2012-11-20T15:36:42.930 に答える
0

デフォルトで選択された値をどこにも設定していません。

SelectList に使用している特定のコンストラクターは次のとおりです。

public SelectList(
    IEnumerable items,
    string dataValueField,
    string dataTextField
)

これはデフォルト値を設定しません。これを使用するか:

public SelectList(
    IEnumerable items,
    string dataValueField,
    string dataTextField,
    Object selectedValue
)

そして、selectedValueを指定するか、選択したい項目の SelectedListItem の Selected プロパティを手動で true に設定します (http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlistitem(v=vs.108 .aspx)。

これは恥知らずなプラグですが、それでも良いリソースだと思います: http://blinkingcaret.wordpress.com/2012/08/11/using-html-dropdownlistfor/

于 2012-11-20T15:35:12.573 に答える