我的视图中有这个下拉列表我正在尝试连接到我的 MVC4 Web 应用程序中的模型。
这是我的模型对象上的一个属性:
/// <summary>
/// Used to provide values in the type drop down list in.
/// </summary>
public IEnumerable<SelectListItem> SomeTypes
{
get
{
var someTypeNames = new [] { "abc", "def", "xyz" };
var someTypes = Enum.GetValues(typeof(ESomeType)).Cast<EsomeType>();
var someTypesSelectItemsList = new List<SelectListItem>();
someTypesSelectItemsList.Add(new SelectListItem()
{
Selected = true,
Text = "Choose a type",
Value = "-1"
});
foreach (var eSomeType in someTypes)
{
var sli = new SelectListItem()
{
Selected = false,
Text = someTypeNames[(int)eSomeType],
Value = ((int)eSomeType).ToString()
};
someTypesSelectItemsList.Add(sli);
}
return someTypesSelectItemsList;
}
set { }
}
这是我稍后将在视图中绑定下拉列表的模型属性:
[DataMember, Required]
[Display(Name = "Type:")]
public virtual int SomeType { get; set; }
然后我在我的视图中打印这个:
@Html.LabelFor(m => m.SomeType)
@Html.DropDownListFor(m => m.SomeType, new SelectList(Model.SomeTypes, "Value", "Text"), new { ng_model = "type", ng_change = "ChangeType()" })
@Html.ValidationMessageFor(m => m.SomeType)
现在这一切都很好(我稍后会重构更多),但我的问题在于呈现的 html:
<label for="SomeType">Type:</label>
<select data-val="true" data-val-number="The field Type: must be a number." data-val-required="The Type: field is required." id="SomeType" name="SomeType" ng-change="ChangeType()" ng-model="type">
<option value="-1">Choose a type</option>
<option selected="selected" value="0">abc</option>
<option value="1">def</option>
<option value="2">xyz</option>
</select>
<span class="field-validation-valid" data-valmsg-for="SomeTypeType" data-valmsg-replace="true"></span>
如您所见,“abc”选项是 selected="selected" 而不是我的“选择类型”选项,我们可以清楚地看到我的模型中的代码设置了正确的选项。这里发生了什么?
谢谢您的帮助!!