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
としての私のモデルに引き込まれますされ、次のようになります
すべてが素晴らしい作品、それはリストを表示します選択した値をデータベースに保存します。デバッグモードでは、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
あなたのタイトルを新しいSelectListヘルプの最後のパラメータに渡しますか?新しいSelectList(Model.Titles、 "Key"、 "Value"、Model。タイトル) ' –
残念ながら、 – Pickle
' Title'の値がオプション値の大文字と小文字を区別していませんか?表示されたコードは正常に動作します。 –