一直呆在这2天...希望你们可以帮忙。html.dropdownlistfor选定值未选择
使用VB.Net与MVC4框架。
我在查看一个Html.DropDownListFor看起来像这样:
@Html.DropDownListFor(Function(model) model.Title, New SelectList(Model.Titles, "Key", "Value"), "-select-", New With {.id = "titles", .class = "form-control"})
Model.Titles是一个词典(字符串,字符串)这是这样一个简短列表,其中我宁愿把它直接来自函数而不是数据库。得到了主意,使用词典列表从这里:
我的功能看起来是这样的,它被载入到我作为Model.Titles
Public Function getAgcRepTitles() As Dictionary(Of String, String)
Dim list As New Dictionary(Of String, String)
list.Add("A/D/SGT", "A/D/SGT")
list.Add("A/SGT", "A/SGT")
list.Add("CPL", "CPL")
list.Add("DET", "DET")
Return list
End Function
一切的伟大工程模型,它显示的列表并将选定的值保存到数据库。在调试模式下,当我在View中探索DropDownListFor时,可以看到Model.Title从数据库中检索到正确的值(例如“DET”),并且我可以看到Model.Titles包含我的上述列表功能。但是尽我所能努力,我无法让DropDownListFor从列表中显示Model.Title。
在HTML中的选择元素没有选择的选择,但在其他看起来不错:
<select name="Title" class="form-control">
<option value="">-select-</option>
<option value="A/D/SGT">A/D/SGT</option>
<option value="A/SGT">A/SGT</option>
<option value="CPL">CPL</option>
<option value="DET">DET</option>
</select>
我试着加入Model.Title值在视图选择列表的的的SelectedValue。我试过使用SelectListItems而不是Dictionary的列表,并通过Viewbag.myTitles将它发送到View。我试过使用整数键值(0,1,2,3 ...)。什么都没有
我还应该补充说,我有另一个DropDownListFor在相同的视图,完美的作品。当你比较它们时....这个将它的列表从数据库中作为SelectListItems拖入SelectList(它使用Value和Text,分别代替Key和Value),其中Value是一个从零开始的整数,Text是字符串。
真的让我的头撞到了这个。
编辑:更多信息。当我提交表单时,已修改的数据已成功上载到数据库,并且Controller将模型数据发送回View。好的....在这个视图DropDownListFor作品!但是,然后我点击刷新,并从DropDownListFor失去了我的选定值(即使我的模型数据是IDENTICAL)。
这里是我的控制器:
<AllowAnonymous()> _
Function Update() As ActionResult
If WebSecurity.IsAuthenticated Then
Dim user = db.AgcRepProfile.Where(Function(AgcRep) AgcRep.Email = WebSecurity.CurrentUserName).ToList
If user.Count = 1 Then
Dim getAgencies = db.AgencyProfile.Where(Function(Agency) Agency.Active = True).OrderBy(Function(Agency) Agency.Name).ToList
ViewBag.myAgencies = New SelectList(getAgencies, "AgcId", "Name")
user(0).Titles = New myLists().getAgcRepTitles
ViewData("success") = ""
Return View(user(0))
End If
End If
Return RedirectToAction("index", "home")
End Function
<HttpPost()> _
<ValidateAntiForgeryToken()> _
Function Update(agcrep As AgcRep) As ActionResult
If ModelState.IsValid And WebSecurity.IsAuthenticated Then
db.Entry(agcrep).State = EntityState.Modified
db.SaveChanges()
Dim agencies = db.AgencyProfile.Where(Function(Agency) Agency.Active = True).OrderBy(Function(Agency) Agency.Name).ToList
ViewBag.myAgencies = New SelectList(agencies, "AgcId", "Name", agcrep.AgcId.ToString)
agcrep.Titles = New myLists().getAgcRepTitles
ViewData("success") = "changes have been saved"
Else
ViewData("success") = "Update failed. Please try again."
End If
Return View(agcrep)
End Function
是否将您的标题传递给新的SelectList帮助的最后一个参数?即“新选择列表(Model.Titles,”Key“,”Value“,Model)。标题)' –
不幸的是 – Pickle
你确定'Title'的值是否与选项值中的一个相匹配(大小写,无空格等)?你所显示的代码将会正常工作。 –