我已经阅读了这个问题ASP.NET MVC DropDownListFor not selecting value from model并回答但我不知道我的问题的解决方案 .
这是我的看法:
@foreach (var adjusterLanguages in Model.adjusterLanguages)
{
<div class="editor-field row">
@Html.DropDownListFor(model => Model.adjusterLanguages[i].languageID,
(SelectList)ViewBag.ForeignLanguages)
@Html.ValidationMessageFor(model =>Model.adjusterLanguages[i].languageID)
</div>
<div style="clear: left;"></div>
i++;
}
我可以确认正在填充模型数据(来自我的控制器):
model.adjusterLanguages = adjLangs;
那么,如何在模型发送到视图时选择项目?
生成的html如下:
<div class="editor-field row">
<select id="adjusterLanguages_0__languageID" name="adjusterLanguages[0].languageID"><option value="">--Select--
</option>
<option value="94c5be88-814e-4719-9784-587eb88aa975">Afrikanns</option>
<option value="37b7bf71-7f4e-47c2-8b81-652b0d63dbcb">Albanian</option>
<option value="c94d6d85-0ba2-47d7-932e-2a61feba37b3">Arabic</option>
<!-- ... truncated for brevity ... -->
</select>
<span class="field-validation-valid" data-valmsg-for="adjusterLanguages[0].languageID" data-valmsg-replace="true"></span>
</div>
<div style="clear: left;"></div>
<div class="editor-field row">
<select id="adjusterLanguages_1__languageID" name="adjusterLanguages[1].languageID">
<option value="">--Select--</option>
<option value="94c5be88-814e-4719-9784-587eb88aa975">Afrikanns</option>
<option value="37b7bf71-7f4e-47c2-8b81-652b0d63dbcb">Albanian</option>
<option value="c94d6d85-0ba2-47d7-932e-2a61feba37b3">Arabic</option>
<!-- ... truncated for brevity ... -->
</select>
<span class="field-validation-valid" data-valmsg-for="adjusterLanguages[1].languageID" data-valmsg-replace="true"></span>
</div>
6 回答
我找到了答案!感谢大家的帮助 . 当我将代码更改为以下代码时,它可以正常工作 . 代码只是指定选定的值:
当您在控制器中填充
ViewBag.ForeignLanguages
时,在应该选择的项目上,将.Selected
属性设置为true .但是,您将遇到此问题,因为您有许多项目使用相同的
ForeignLangauges
项目列表 .您需要为列表中的每个
adjusterLanguages
创建一个列表 . 他们无法共享同一个列表,因为adjusterLanguages[0]
需要选择的项目不同于adjusterLanaguages[1]
Edit:
我喜欢这个型号:
在控制器中,您使用ID和它自己的可用语言列表填充列表 .
在你看来:
所以每个
DropDownListFor
获得's it'自己的语言列表 .在我看来,
ViewBag.ForeignLanguages
的一个项目应该Selected
属性设置为true
. DropDownListFor方法根据ModelState选择项目 . Here你有DropDownListFor方法的源代码,有类似的东西:如果该值为null,则从
Selected
属性中检索选定的值我知道这是一个老问题,但万一有人面临同样的问题而不是我 . 在我的情况下,我不小心使用了正常变量而不是模型中的属性,只要我将其设置为属性而不是它开始工作 .
我添加了一个扩展方法来强制执行值选择 . 它还在页面重新加载时保留视图状态数据 .
用法是:
我在SList而不是ViewBag中发送IEnumerable