2016-04-19 30 views
0

2日間これに拘束されました。選択された値のhtml.dropdownlistが選択されていません

MVC4フレームワークでVB.Netを使用します。

私はこのようになります私の見解ではHtml.DropDownListForあります

@Html.DropDownListFor(Function(model) model.Title, New SelectList(Model.Titles, "Key", "Value"), "-select-", New With {.id = "titles", .class = "form-control"}) 

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 
マイ機能がModel.Titles

としての私のモデルに引き込まれますされ、次のようになります

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

すべてが素晴らしい作品、それはリストを表示します選択した値をデータベースに保存します。デバッグモードでは、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> 

私はビューでSelectListののSelectedValueのにModel.Title値を追加しようとしました。私は辞書の代わりにSelectListItemsのリストを使用して、Viewbag.myTitles経由でViewに送信しようとしました。私は、キー値(0,1,2,3 ...)の整数を使ってみました。何も動作しません。

また、同じViewに別のDropDownListForが完全に追加されていることを追加する必要があります。それらを比較すると、SelectListItemsとしてSelectList(キーと値の代わりにValueとTextを使用する)にデータベースからそのリストがプルされます。ここで、Valueはゼロから始まり、Textは文字列です。

本当にこのヘッドで頭を叩いています。

EDIT:詳細フォームを送信すると、変更されたデータは正常にデータベースにアップロードされ、コントローラはモデルデータをビューに送り返します。 OK ... ....この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ヘルプの最後のパラメータに渡しますか?新しいSelectList(Model.Titles、 "Key"、 "Value"、Model。タイトル) ' –

+0

残念ながら、 – Pickle

+0

' Title'の値がオプション値の大文字と小文字を区別していませんか?表示されたコードは正常に動作します。 –

答えて

1

はそれを手に入れました!苦しかったSweet Jebus。

モデル変数と同じ名前の変数を含むViewDataまたはViewBagを使用することはできません。

ビューの上部からViewbag(「タイトル」)を削除すると、私のModel.Titleは完全に機能しました。

関連する問題