1

以下のように DropDownList を表示しています。

@Html.DropDownListFor(model => model.RoleID, (IEnumerable<SelectListItem>)ViewBag.RoleID, new { @class = "dropdownlistCustom" })
@Html.DropDownList("RoleID", (IEnumerable<SelectListItem>)ViewBag.RoleID, new { @class = "dropdownlistCustom" })
@Html.ValidationMessageFor(model => model.RoleID)

DropDownListと の両方を試しましDropDownListForたが、どちらも正しい を取得していませんSelectedValue

コントローラーから、パラメーターを設定していselectedValueます ( SelectList() の最後のパラメーターを参照) 。

public ActionResult Edit(int id = 0)
{
    UserDetail userDetail=db.UserDetails.Find(id);
    if(userDetail!=null)
    {
       ViewBag.RoleID = new SelectList(db.Roles.Where(r => r.RoleStatus == "A"), "RoleID", "RoleName", userdetail.RoleID);
       return View(userdetail);
    }
}

モデル :

[Display(Name = "Name Of the Role")]
public int RoleID { get; set; }
[ForeignKey("RoleID")]
public virtual Role Roles { get; set; }
4

2 に答える 2

1

まず、ViewBag を使用せず、ビュー モデルを使用して選択リスト (または選択リストのデータ) をコントローラーからビューに渡すことをお勧めします。

次に、この例またはこの例(できれば両方) の使用法を確認することをお勧めしますDropDownListFor。複雑すぎると思いますSelectList。それほど単純ではなく、なぜ期待どおりに機能しないのかについて混乱することも少なくなります。既存の例を使用して、変数名を自分のものに変更してください。

使用しないもう 1 つの重要なヒントViewBagは、ビュー モデルを作成するときに、どこからでもデータを取得できるコントローラーのすぐそこに選択リストを作成できることです。次に、ビューでは、引数が提供されている事前構築済みのビューモデルプロパティを使用するだけで済みますSelectList-よりクリーンで優れたものになります。ビューはデータの操作を最小限に抑え、適切な形式で適切な場所に適切な方法で表示するだけです。

私が提供した例を見てください。DropDownListFor適切に使用する方法を理解するのに十分賢いと確信しています。非常に簡単です。適切な場所に適切なパラメーターを指定し、他の人が何をしているかを見て、同じことをするだけです。

これがお役に立てば幸いです。進捗状況をお知らせください。

于 2013-03-11T13:20:17.847 に答える
0

DropDownListForそれは正しい使い方をしていないからです。あなたが求めている関数定義は次のとおりです。

DropDownListFor(lambda, selectList, *selectedItem*, htmlAttributes)

RoleIdパラメータとして渡す必要があるselectedItemため、パラメータがありませんselectList。MVCはそれを自動的に作成しません。DropDownListForインラインで作成するか、モデルに渡すかViewBag、モデルに設定し、使用するプロパティを指定して、使用する選択リストを指定する必要があります。

編集

ごめん。それは私の悪いです。ここはまだ朝早く、1 時間 (サマータイム) を失ったので、私の脳はまだすべてではありません。DropDownListForとを混ぜDropDownListました。ではDropDownListFor、選択されたアイテムはモデルの設定値から取得されますが、適切な を提供する必要がありますSelectListSelectList何を使用するかを指示する必要がある選択したアイテムを指定しようとしているようです。

を使用する場合は、使用する と選択した値のDropDownList両方を指定する必要がありSelectListます。

于 2013-03-11T13:05:17.777 に答える