我的模型包含一系列郵政編碼項目(IEnumerable<SelectListItem>
)。 它還包含一組選定的郵政編碼(string[]
)。MVC下拉列表不拾取選定的項目?
在我的HTML頁面中,我想將每個選定的郵政編碼作爲下拉列表與所有郵政編碼選項一起顯示。我第一次嘗試沒有成功:
@foreach (var zip in Model.ZipCodes) {
Html.DropDownList("ZipCodes", Model.ZipCodeOptions)
}
我意識到,儘管這會產生下拉列表右擊「name」屬性,它不會知道哪個郵編元素適用於特定框中的值,並可能只是默認第一個。
我的第二次嘗試真的讓我感到驚訝。我明確正確的SelectListItem的Selected屬性設置爲true,它仍然呈現什麼也沒有控制選擇:
@foreach (var zip in Model.ZipCodes) {
Html.DropDownList("ZipCodes", Model.ZipCodeOptions.Select(x => (x.Value == zip) ? new SelectListItem() { Value = x.Value, Text = x.Text, Selected = true } : x))
}
在那裏,它返回一個新的IEnumerable<SelectListitem>
包含所有原始項目,除非它是所選擇的項目,其中如果該元素是一個新的SelectListItem,並且它的Selected屬性設置爲true。該財產在最終產出中完全沒有兌現。
我最後的嘗試是試圖將字符串元素,我想爲要使用的值上使用一個明確的指標:
@{int zipCodeIndex = 0;}
@foreach (var zip in Model.ZipCodes) {
Html.DropDownList("ZipCodes[" + (zipCodeIndex++) + "]", Model.ZipCodeOptions)
}
,不能正常工作,可能是因爲名字不再是「 ZipCodes「,但是」ZipCodes [x]「。我起初也收到了某種只讀收集錯誤,必須將ZipCodes屬性的類型從string[]
更改爲List<string>
。
在第四嘗試,我試過如下:
@for (int zipCodeIndex = 0; zipCodeIndex < Model.ZipCodes.Count; zipCodeIndex++)
{
var zip = Model.ZipCodes[zipCodeIndex];
Html.DropDownListFor(x => x.ZipCodes[zipCodeIndex], Model.ZipCodeOptions)
}
產生控制與ID,如「ZipCodes_1_」和名稱,如「拉鍊碼[1]」,但不會選擇正確的價值觀。如果我明確設置權項目的Selected屬性,那麼這個工程:
@for (int zipCodeIndex = 0; zipCodeIndex < Model.ZipCodes.Count; zipCodeIndex++)
{
var zip = Model.ZipCodes[zipCodeIndex];
Html.DropDownListFor(x => x.ZipCodes[zipCodeIndex], Model.ZipCodeOptions.Select(x => (x.Value == zip) ? new SelectListItem() { Value = x.Value, Text = x.Text, Selected = true } : x))
}
然而,這種做法的問題是,如果我在JavaScript中添加一個新的下拉菜單,讓他們都命名爲「郵編」 ,那麼這些將完全覆蓋所有顯式索引的,而這些都不會傳遞給服務器。它似乎並不喜歡將純粹的「ZipCodes」名稱與顯式數組元素「ZipCodes [1]」混合使用,即使它們映射到專有變量時也使用相同的變量。
在U.I中,用戶可以點擊一個按鈕添加一個新的下拉菜單並選擇另一個郵政編碼。它們都被命名爲ZipCodes,所以它們都被髮布到ZipCodes數組中。當在上面的循環中渲染字段時,我期望它讀取給定索引處的屬性值,但這不起作用。我甚至嘗試重新映射SelectListItems,以便正確的選項的「Selected」屬性爲true,但它仍呈現沒有選中任何內容的控件。出了什麼問題?
示出了使用的一個例子,我希望所有的「選擇」的元素具有相同的名稱「郵編」,這樣我可以添加更多的動態無擔心解析和索引名稱連續我們。我認爲這應該與我的第二次嘗試一樣開箱即用,但它不會,因爲出於某種原因,DropDownList幫助程序根本無法遵守SelectListItems的Selected屬性。我認爲這是一個錯誤。 – Triynko