私はループ中で、リスト内の "Selected"アイテムをオンザフライで変更しようとしています。@ Html.DropDownListFor選択したアイテムが機能しない
ただし、デフォルトの項目は選択されていません。ソースhtmlを見ると、「選択された」パラメータはありません。
public List<SelectListItem> buyerDropdown { get; set; }
public int selectedBuyer { get; set; }
はここに私のコードです:
はここに私のクラスである
@foreach (American_States state in Model.AmericanStates)
{
{
// change the "selected" buyer to match the buyer Id for this state
Model.buyerDropdown.Where(x => x.Value == Convert.ToString(state.Buyer.Id)).FirstOrDefault().Selected = true;
}
<tr>
<td>@state.name</td>
<td>@state.Title.OfficerName</td>
<td>@Html.DropDownListFor(model => model.selectedBuyer, Model.buyerDropdown, new { @class = "form-control" })</td>
<td></td>
</tr>
}
私はコードにステップするとき、私はSelectItemListで正しい項目を「選択」するように更新されて見ることができます。
ドロップダウンの正しい項目が選択されていない理由がわかりません。 T-ロイに基づいてUPDATE
私は今、このコードを持っている:
私は、正しい値が選択されたインデックス値に対して計算されているが、ドロップダウンがまだデフォルトを選択していないデバッグする場合値:そのID
年代のオフに基づいて値を見つけようとして扱う...それはのでSingle()
メソッドを使用するのがベストプラクティスです
@foreach (American_States state in Model.AmericanStates)
{
{
// change the "selected" buyer to match the buyer Id for this state
string selectedOption = Model.buyerDropdown.Single(x => x.Value == Convert.ToString(state.HudHomeStore_Buyer.Id)).Value;
<tr>
<td>@state.name</td>
<td>@state.HudHomeStore_Title.OfficerName</td>
<td>@Html.DropDownListFor(model => model.selectedBuyer, new SelectList(Model.buyerDropdown, "Value", "Text", selectedOption), new { @class = "form-control" })</td>
<td></td>
</tr>
}
}
あなたのモデルクラスはselectedBuyerをどのように処理しますか?すべてのAmericanStateで同じプロパティを使用しているようですか? –
コードは単純に意味がありません。同じプロパティにバインドするループ内に複数のドロップダウンを作成します。無効なhtml(重複する 'id'属性)を生成するだけでなく、送信時に最初のドロップダウンだけがモデルにバインドされます。実際にここで何をしようとしていますか? –
そしてモデルバインディングはあなたのプロパティの値にバインドするので、選択されたものを決定する 'selectedBuyer'の値になります(' selectedBuyer'の値がオプション値の1つと一致すれば、選択されますが、 –