我正在研究ASP.NET MVC3應用程序,我無法使用DropDownListFor在特定編輯器視圖中使用我的屬性。DropDownListFor未選擇SelectList中的選定項目
我的模型是Person
,並且一個人有一個屬性指定它是「Person Type」。 PersonType
是一個包含名稱/描述和ID的類。我可以通過名爲ApplicationSettings
的靜態/共享類訪問應用程序中的可用PersonType
。
在爲編輯模板視圖我Person
我已經創建了一個調試用SelectList
:
@ModelType MyNamespace.Person
@Code
Dim pTypesSelectList As New SelectList(MyNamespace.ApplicationSettings.PersonTypes, "ID", "Name", Model.PersonType.ID)
End Code
我再提供這個SelectList
作爲參數綁定到我的Person
的PersonType
財產DropDownListFor
。
我還打印出每一個項目在SelectList
的Selected
性能調試目的:
<div style="text-align: center; margin: 5px 0 0 0;">
<div>
@Html.LabelFor(Function(model) model.PersonType)
</div>
<div>
@Html.DropDownListFor(Function(model) model.PersonType, pTypesSelectList)
@Html.ValidationMessageFor(Function(model) model.PersonType)
<br />
<br />
<!-- The following is debugging code that shows the actual value-->
@Model.Type.Name
<br />
@Model.Type.ID
<br />
<br />
<!--This section is to show that the select list has properly selected the value-->
@For Each pitem In pTypesSelectList
@<div>
@pitem.Text selected: @pitem.Selected
</div>
Next
</div>
</div>
視圖綁定到Person
其PersonType
屬性是「人員類型#2」,我希望這被選中;然而,這段代碼的HTML輸出如下所示:
<div style="text-align: center; margin: 5px 0 0 0;">
<div>
<label for="PersonType">PersonType</label>
</div>
<div>
<select id="PersonType" name="PersonType">
<option value="7e750688-7e00-eeee-0000-007e7506887e">Default Person Type</option>
<option value="87e5f686-990e-5151-0151-65fa7506887e">Person Type # 1</option>
<option value="a7b91cb6-2048-4b5b-8b60-a1456ba4134a">Person Type # 2</option>
<option value="8a147405-8725-4b53-b4b8-3541c2391ca9">Person Type # 3</option>
</select>
<span class="field-validation-valid" data-valmsg-for="PersonType" data-valmsg-replace="true"></span>
<br />
<br />
<!-- The following is debugging code that shows the actual value-->
Person Type # 2
<br />
a7b91cb6-2048-4b5b-8b60-a1456ba4134a
<br />
<br />
<!--This section is to show that the select list has properly selected the value-->
<div>
Default Person Type selected: False
</div>
<div>
Person Type # 1 selected: False
</div>
<div>
Person Type # 2 selected: True
</div>
<div>
Person Type # 3 selected: False
</div>
</div>
</div>
正如你可以看到在選擇列表的項目打印所選屬性顯示,第三項是「選擇」。但是讓我瘋狂的是與此相對應的選項是未選中。
你可以在你的ApplicationSettings類中發佈PersonTypes的代碼嗎? – ataravati
可能看到例如這個:http://stackoverflow.com/questions/17691742/ - 通常,'SelectList'中的'Selected'屬性將被HTML助手完全忽略,除非沒有其他選項。如果'DropDownListFor'可以通過其他方式找到值,它會堅持這個值。在這種情況下,它將使用'model.PersonType'('.ToString()')的值 - 但這並不是你想要的,通過將'model.PersonType.ID'傳遞給'SelectList'來判斷。 – JimmiTh
PersonType類的ToString方法返回它的名稱:將其與ID(Guid)進行比較永遠不會匹配。我如何繞過這個? – Frinavale