簡體   English   中英

.NET MVC MultiSelectList和選定的值

[英].NET MVC MultiSelectList and selected values

我正在嘗試為MultiSelectList設置選定的值,但頁面不顯示任何選定的值。 我已經嘗試過每一種實用的方法來做到這一點並且仍然得到相同的結果。 我目前正在嘗試通過構造函數傳遞所選對象的列表。 讓我感到震驚的是,當我檢查MultiSelectList對象時,selectedvalues屬性包含我使用構造函數傳遞給它的項目,但它仍然不顯示。

我注意到很多人都有同樣的問題,但我沒有看到一個對我有用的答案。 我已經嘗試遍歷列表並將selected屬性設置為true,我嘗試從頭創建多選列表並設置每個單獨的項選擇屬性,我嘗試使用構造函數。 這些都沒有奏效。 我還發現了一個建議,即MultiSelectList屬性的名稱與控件(我嘗試過的)相同,但不起作用。 為什么使用此框架創建包含所選值的下拉列表如此困難? 我錯過了什么嗎?

<label for="StatesOfPractice">States of Practice:</label>
                    <br />
                    <%= Html.ListBox("StatesOfPractice", Model.StatesOfPracticeList)%>
                    <br />
                    <%= Html.ValidationMessage("StatesOfPractice")%>

編輯1

當我實例化MultiSelectList時,它似乎正在發生。 如果我在視圖中檢查對象並打開結果視圖,我可以看到當我知道它應該是“阿拉斯加”時沒有被選中。

http://imgur.com/eTIdH.jpg

我正在這樣實例化。

new MultiSelectList(List<GenericDataContract>, "Code", "Description", List<GenericDataContract>);

GenericDataContract只是一個具有兩個屬性Code和Description的類。 第一個List是所有狀態,第二個List是我選擇的狀態。

Grrrrrr,我發現了它。 顯然,所選項目只能是字符串列表。 一旦我修改了我的代碼以傳遞它,就選擇了這些值。

好吧,這個讓我很困惑,但我想我已經明白了。

選擇默認值時顯示MultiSelectList的問題是我使用@Html.DropDownListFor(...)來顯示多選列表而不是@Html.ListBoxFor(...) 令人困惑的是, DropDownListFor 將顯示多選列表,如果您指定HTML屬性以強制它這樣做,但默認值不起作用,因為它只打算有一個默認值 - 因此下面將沒有選擇任何默認值:

List<string> myStrings;
myStrings = new List<string>();
myStrings.Add("aaa");
myStrings.Add("bbb");
myStrings.Add("ccc");

ViewData["MyStringsDropdown"] = new MultiSelectList(
    myStrings.Select(abc => new { StringId = abc, Title = abc + "Title" }),
    "StringId",
    "Title",
    myStrings.Where(str => str == "aaa" || str == "ccc").ToList()
);

...

@Html.DropDownListFor(model => model.MyStrings, (MultiSelectList)ViewData["MyStringsDropdown"], new { size = "10", multiple = "multiple" })

但是,以下內容顯示所選的“aaa”和“ccc”的默認值:

@Html.ListBoxFor(model => model.MyStrings, (MultiSelectList)ViewData["MyStringsDropdown"], new { size = "10", multiple = "multiple" })

但這是真正的踢球者; ASP.NET有時似乎緩存控件的類型,因此您可以使用ListBoxFor替換DropDownListFor ,並且在重新啟動IIS工作進程之前 ,它仍然不會預先選擇任何默認值。 我覺得這很奇怪,它讓我耽擱了一會兒。

我相信它會從模型中提取所選項目,而不是從項目列表中提取。 確保使用要選擇的項填充StatesOfPractice模型屬性。 也就是說, StatesOfPracticeList模型屬性提供用於填充列表的項集。 模板屬性StatesOfPractice在發布表單時將是所選屬性值的集合,還應包含呈現視圖時的默認選定值。 在引擎蓋下,它使用HtmlHelper GetModelStateValue方法來查找任何選擇列表的選定值。 我認為這樣做是為了在存在驗證錯誤時維護所選值並且使用模型狀態錯誤重新呈現表單更簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM