ASP.NET MVC-Html.DropDownList-値の設定によViewData.モデル
-
23-08-2019 - |
質問
ははじまったばかりであっASP.NET MVCとに迷いは以下の状況です。でどのようなバグがついて説明いただければ幸いです:)
のれん基本的なもの
<%=Html.DropDownList("MyList", ViewData["MyListItems"] as SelectList)%>
<%=Html.TextBox("MyTextBox")%>
を使用しない場合、これらのモデルの選択項目として設定されていることが期待
//works fine
public ActionResult MyAction(){
ViewData["MyListItems"] = new SelectList(items, "Value", "Text"); //items is an ienumerable of {Value="XXX", Text="YYY"}
ViewData["MyList"] = "XXX"; //set the selected item to be the one with value 'XXX'
ViewData["MyTextBox"] = "ABC"; //sets textbox value to 'ABC'
return View();
}
もしようとした場合に負荷をモデルには、テキストボックスの値を設定しても、ドロップダウンの作品は、選択された項目のセットです。
//doesnt work
public ActionResult MyAction(){
ViewData["MyListItems"] = new SelectList(items, "Value", "Text"); //items is an ienumerable of {Value="XXX", Text="YYY"}
var model = new {
MyList = "XXX", //set the selected item to be the one with value 'XXX'
MyTextBox = "ABC" //sets textbox value to 'ABC'
}
return View(model);
}
そのアイデア?私の現在の考え方を教えてほしいないことがありますのでそのものがモデルを用いてい限設定を選択された項目のSelectListコンストラクタを利用するのではなく、viewdataをカメラ-tv付きオートロックのselectlistのモデルとしての利益の洗浄、コードでも承っております-私はなぜこの方法だ。
このページを提案
解決
ヘミングとhawingの束後
if (ViewData.ModelState.TryGetValue(key, out modelState))
MVCは唯一のViewData辞書<>オブジェクトを見ているとViewData.Modelオブジェクトにダウンたどらないことで値を解決しようとしていることを意味します。
それは私がわからないバグ、制限やデザインの決定だかどうか。しかし、あなたはそれを次のように修正することができます:
<%= Html.TextBox("MyTextBox", ViewData.Model.MyTextBox) %>
他のヒント
実際に、あなただけのために null
のための Html.DropDownList()
.
しかし同じ問題により、リフレクタのMVCソースコード。
の System.Web.Mvc.Extensions.SelectExtensions
クラスの SelectInternal()
方法であるかどうかを判定 selectList パラメータが nullの場合 います。い渡されたとして null
, のように見える SelectList
います。
こちらはCode-behind".
ViewData["MyDropDown"] = new SelectList(selectListItems,
"Value",
"Text",
selectedValue.ToString()
);
ここでは、HTMLビューのコードです。
<%= Html.DropDownList("MyDropDown", null,
"** Please Select **",
new { @class = "my-select-css-class" }
) %>
注意:を使用していASP.NET MVC2.0(Β版)
更新順月31日2012年
後に広く使用ASP.NET MVCは、過去3年間にも利用 additionalViewData
から Html.EditorFor()
方法 します。
渡御 [リスト] として anonymous
オブジェクト 同じプロパティ名 として、モデルの物件に Html.EditorFor()
方法。
<%= Html.EditorFor(
m => m.MyPropertyName,
new { MyPropertyName = Model.ListItemsForMyPropertyName }
) %>
したい場合は詳細を参照ください 私の答えに別のスレッドがここに.
SelectListのコレクションを作成するときに、コントローラのアクションで選択した値を設定してみます。
ViewDataを[ "AddressTypeId"]は新しいSelectListの=(CustomerService.AddressType_List()、 "AddressTypeId" を、 "名前"、のmyItem.AddressTypeIdの)
私は遅く、ここで明らかです。他の誰かがこの問題に出くわした包みしかし、私はこのコメントを追加したいです。
MVC 2であなたが項目を選択するには次の操作を行うことができます...
public ActionResult Edit(int id)
{
Team team = _db.TeamSet.First(m => m.TeamID == id);
var fanYear = from c in _db.FanYearSet select c;
ViewData["FantasyYear"] = new SelectList(fanYear, "YearID", "FantasyYear", team.FanYearReference.EntityKey.EntityKeyValues[0].Value);
var league = from c in _db.LeagueSet select c;
ViewData["League"] = new SelectList(league, "LeagueID", "League_Name", team.LeaguesReference.EntityKey.EntityKeyValues[0].Value);
return View(team);
}
4番目のパラメータ値を取り、あなたがドロップダウンリストで値を選択します。私の例では、私はテーブルと呼ばれるチームを持っており、それは私がfanYearとリーグと呼ばれるテーブルに設定され関係を持っています。
これで、リーグのためのファンタジーの年と別のドロップダウンリストを構築し、私が最初に私が編集してるチームを得ることがわかります。チームのための年とリーグを決定するために、私は、エンティティ参照を使用する必要がありました。
ただ、そこにそれを出したかったです。私はこれを行うのいずれかの例を見つけることができませんでした。
あなたが無効またはヌルのViewDataに問題がある場合は、お使いのコントローラのアクションに注意を払います。
あなたがHtml.DropDownlist用マイリストをViewDataをと呼ばれていると仮定マイリスト呼ばれます。
あなたはModelState.AddModelError("MyList","Please select the profession")
を呼び出す場合は、この警告テキストを使用してViewDataをリストコンテンツを交換するでしょう。
インターネットのまわりの人々がDropDownListコントロールにViewDataを持つヌル問題を抱えている理由でもあります。
一番下の行は、彼らはあなたのHTMLコントロールを妨害してはならない、エラーモデルにあなたのIDに注意を払う、である。
これで私の関心は、あなたが唯一のフィールドのリストを使用することです。私は、複数のユーザーフィールドを持つエンティティを持っているので、私は、次を使用します:
< %= Html.DropDownList("fieldAAA",
new SelectList( (IEnumerable) ViewData["Users"], "Value", "Text", fieldAAA))
%>
[OK]を私はC#でただし、次の作品をこのスレッドから何かが欠けすることができます
Html.DropDownList("ProfessionGuid", (SelectList)ViewData["Professions"])
どこProfessionGuid
は "リストで選択される値です。
VB.Netで、私はそれが可能と信じます:
Html.DropDownList("ProfessionGuid", ViewData["Professions"] AS SelectList)