2016-04-19 78 views
0

一直呆在这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是一个词典(字符串,字符串)这是这样一个简短列表,其中我宁愿把它直接来自函数而不是数据库。得到了主意,使用词典列表从这里:

http://nimblegecko.com/dropdownlistfor-with-dictionaries-in-ASP-NET-MVC-and-why-SelectList-wants-to-kill-you/

我的功能看起来是这样的,它被载入到我作为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 
+0

是否将您的标题传递给新的SelectList帮助的最后一个参数?即“新选择列表(Model.Titles,”Key“,”Value“,Model)。标题)' –

+0

不幸的是 – Pickle

+0

你确定'Title'的值是否与选项值中的一个相匹配(大小写,无空格等)?你所显示的代码将会正常工作。 –

回答

1

明白了!甜Jebus是痛苦的。

原来你不能有一个ViewData或ViewBag包含一个变量,它与你的Model变量名称相同。

当我从视图顶部移除Viewbag(“标题”)时,我的Model.Title完美运行。

相关问题