2011-08-01 73 views
0

這個問題已經快把我逼瘋了,並星期一上午沒有真正幫助那些與價值。DropDownList的了selectedValue沒有得到來自DB

我加載2個dropdownboxes像這樣:

  • 這一個被其受分貝值的SelectedValue

    <dd><%= Html.DropDownList("type", New SelectList(ViewData("typeList"), 
        "value", "text", Model.type), New With {.class = ""})%></dd> 
    
  • 這其中忽略了模型,並始終顯示加載的值下拉框中的第一個值

    <dd><%= Html.DropDownList("action", New SelectList(ViewData("actionList"), 
        "value", "text", Model.action), New With {.class = ""})%></dd>  
    

我已經調試過這個頁面,Model.Action加載了正確的值,但他們從來沒有被分配到選定的值。

編輯:

這是一個顯示頁面的ActionResult:

<Authorize()> _ 
     Public Function Edit(ByVal id As Guid) As ActionResult 
      Dim article As Article_Ad = articleAdRepository.GetById(id) 

      ViewData("actionList") = GetActionValues() 
      ViewData("typeList") = GetTypeValues() 

      Return View(article) 
     End Function 

而且這些都是喂dropdownboxes功能:

Private Function GetTypeValues() As IEnumerable(Of SelectListItem) 
      Dim list As New List(Of SelectListItem) 
      Dim sel As SelectListItem 

      'Imagem 
      sel = New SelectListItem 
      sel.Text = "Imagem" 
      sel.Value = "image" 
      list.Add(sel) 

      'Video 
      sel = New SelectListItem 
      sel.Text = "Video" 
      sel.Value = "video" 
      list.Add(sel) 

      Return list 
     End Function 

     Private Function GetActionValues() As IEnumerable(Of SelectListItem) 
      Dim list As New List(Of SelectListItem) 
      Dim sel As SelectListItem 

      ' Call browser window 
      sel = New SelectListItem 
      sel.Text = "Mostrar Janela" 
      sel.Value = 1 
      list.Add(sel) 

      ' Play fullscreen video 
      sel = New SelectListItem 
      sel.Text = "Mostrar Video em FullScreen" 
      sel.Value = 2 
      list.Add(sel) 

      ' Show fullscreen picture 
      sel = New SelectListItem 
      sel.Text = "Mostrar Imagem em FullScreen" 
      sel.Value = 3 
      list.Add(sel) 

      Return list 
     End Function 
+0

我們可以看到生成的SelectList的傳遞給你的視圖的代碼? –

+0

@大衛,我已經添加了你請求我的信息的信息。謝謝。 – Hallaghan

+0

只是澄清了問題 - 您期望兩個下拉列表中的選定值設置正確嗎?我的VB可能有點生疏,但你在哪裏設置選定的值? –

回答

1

我發現了這個問題的答案,我覺得最終的結果稍有慚愧,說實話。 似乎我在ViewData變量中使用名稱「action」,這使得它與下拉框的名稱「action」發生衝突。 將ViewData更改爲「操作」(添加了「s」)後,它停止衝突並正確分配選定的值。

對於和我一樣遇到同樣問題的人來說,我的提示是確保沒有其他控件使用您指定給對象的同一名稱,只是爲了安全起見。

感謝大家對這裏的指針。

+1

我以爲我記得閱讀關於類似問題的東西。如果這是你的修補程序,一定要將其標記爲答案,也許稍微詳細一點或者提供一個快速代碼示例。 –

+0

只要stackoverflow允許我(在你回答你自己的問題後2天),我會將它標記爲答案,當我回家時我會詳細說明它。 – Hallaghan

1

你能嘗試設置正確的SelectListItem.Selected值?我假設Imagem項目應該在下面選擇。

Private Function GetTypeValues() As IEnumerable(Of SelectListItem) 
    Dim list As New List(Of SelectListItem) 
    Dim sel As SelectListItem 

    'Imagem 
    sel = New SelectListItem 
    sel.Text = "Imagem" 
    sel.Value = "image" 
    sel.Selected = True ' This line has been added 
    list.Add(sel) 
    '... 

    Return list 
End Function 
+0

在這種情況下,像GetTypeValues這樣的函數只能用來填充IEnumerable,它將提供下拉框。在下拉構造函數中,指定將選擇哪個值。 例如:Model.action可能包含值1,2和3.根據從數據庫加載的值(並且它正確加載,我調試它),選擇列表的值將被選中。 – Hallaghan

+0

@哈拉漢我的錯誤。我錯過了你的'SelectList'構造函數中的一組括號,並認爲它可能是Html.DropDownList覆蓋的一部分(然後我意識到沒有用五個參數覆蓋);) –

+0

好了,在調試一點之後,我發現了一些東西在我的測試中很奇怪:下面的dropdownbox不會得到賦予它的selectedvalue <%= Html.DropDownList(「action」,New SelectList(ViewData(「actionList」),「Value」,「Text」,Model.action),新的與{.class =「」})%>但下面的一個將<%= Html.DropDownList(「s_action」,新的SelectList(ViewData(「actionList」),「價值」,「文本」,Model.action) ,New With {.class =「」})%>如果我將dropdownbox的id更改爲s_action而不是操作,它將按預期工作。問題是身份證,但我不明白爲什麼... – Hallaghan

1

我已經採取了類似的方法來你在哪裏我在視圖模型打造出的SelectList和我與Html.DropDownList觀點引用它。

一個大區別是,我總是被設置爲字符串值我的價值/文本參數,即使相應的數據類型爲int。

例(C# - 對不起):

private List<SelectListItem> widgets; 

public List<SelectListItem> Widgets 
{ 
    get 
    { 
    if (widgets == null) 
    { 
     widgets = new List<SelectListItem>(); 
     widgets.Add(new SelectListItem { Value = "10", Text = "10" }); 
     widgets.Add(new SelectListItem { Value = "25", Text = "25" }); 
     widgets.Add(new SelectListItem { Value = "50", Text = "50" }); 
     widgets.Add(new SelectListItem { Value = "100", Text = "100" }); 
     widgets.Add(new SelectListItem { Value = "500", Text = "500" }); 
    } 
    return widgets; 
    } 
    private set { } 
} 

但我懷疑它是負責此問題的另一個區別是,我強烈鍵入我的觀點到視圖模型,然後我直接訪問視圖模型的SelectList屬性從視圖中將其分配給控制器中的viewdata。它看起來像將視圖直接綁定到實體(即域模型)。

+0

我在閱讀你的答案後嘗試了這種方法,但它仍然不能單獨識別「行動」的價值。 (我實際上更喜歡C#中的代碼示例,因爲這是我選擇的語言,我在短時間內使用VB.NET) – Hallaghan

+0

我注意到您的Model引用是Model.Action,並且DDL綁定到「action」 - 你嘗試綁定它到「行動」,而不是?只是一個想法。 – Mayo

+0

好了,在調試了一會兒之後,我注意到我的測試中有些奇怪: 下面的dropdownbox不會得到它分配的選定值 <%= Html.DropDownList(「action」,New SelectList(ViewData(「actionList」)) ,「Value」,「Text」,Model.action),New With {.class =「」})%> 但是下面的一個會 <%= Html.DropDownList(「s_action」,New SelectList (「actionList」),「Value」,「Text」,Model.action),New With {.class =「」})%> 如果我將dropdownbox的id更改爲s_action而不是action,如預期。問題是身份證,但我不明白爲什麼... – Hallaghan

相關問題