2017-01-11 22 views
0

我遇到了使用SelectList和Html.DropDownList的問題,我一直無法通過查看以前問題的答案來解決問題。如何正確使用Html.DropDownList與SelectList?

我有一個查看下面的代碼:

Dim myItems As New Collection 
Dim thisItem As SelectListItem 

For Each responsibility In Model.Responsibilities.EBS_Resonsibility 

    thisItem = New SelectListItem 
    thisItem.Text = responsibility.RESPONSIBILITY_NAME 
    thisItem.Value = responsibility.RESPONSIBILITY_ID 
    myItems.Add(thisItem) 
Next 

從我的模型考慮每個項目,把它變成一個SelectListItem,並將其添加到集合。

然後,我把它轉換成一個的SelectList:

Dim myRoles As New SelectList(myRoleItems, "Value", "Text") 

,創造我Html.DropDownList:

@Html.DropDownList("RoleList", myRoles, "Select Role") 

最後處理:

<a href="@Url.Action("RoleHandler", "Account", New With {.RESPONSIBILITY_ID = myRoles.SelectedValue})">Search Buildings</a> 

的問題是,什麼正在通過。我知道我的最後一行與我的SelectList是正確的,因爲如果我添加一個參數來選擇列表的結束爲了selectedValue,它會傳遞參數,像這樣:

Dim myRoles As New SelectList(myRoleItems, "Value", "Text", 905) 

在這種情況下,905獲得通過。所以,我相當肯定,我在DropDownList中訪問我的SelectList中的值時出錯。項目的名稱雖然在DDL中正確顯示,所以我不確定哪裏出錯了。

任何幫助將不勝感激,謝謝!

+0

邊注:'myRoleItems'是'的IEnumerable '(這是通過用'的DropDownList()'方法需要使用新'的SelectList(myRoleItems「。值「,」文本「)​​從第一個創建另一個相同的'IEnumerable '是毫無意義的。 –

回答

0

您擁有的錨標記的代碼有一些C#代碼,它會在服務器上執行。由於用戶可以將所選的下拉選項更改爲客戶端的其他內容,因此您應該使用客戶端JavaScript進行處理。

因此,將鏈接的href值設置爲action方法的基本url(不包含路由值)併爲其指定一個id,我們將使用它來連接某些客戶端行爲。

@:<a id="myLink" href="@Url.Action("RoleHandler","Account")">Search Building</a> 

現在有一些JavaScript代碼來聽click事件此鏈接,請從下拉列表中選擇選項,並用它來建立新的URL。

@section scripts 
    <script> 
    $(function() { 

     $("#myLink").click(function (e) { 
      e.preventDefault(); 
      var url = $(this).attr("href"); 
      url = url + "?RESPONSIBILITY_ID ="+$("#RoleList").val(); 
      window.location.href = url; 
     }); 

    }); 
</script> 
End Section 

而且,你並不真的需要創建一個新的SelectList對象,你可以SelectListItem列表傳遞給您的DropDownList的輔助方法。

Dim list = New List(Of SelectListItem)() From { 
    New SelectListItem() With { 
         .Value = "a", 
         .Text = "a" 
    }, 
    New SelectListItem() With { 
         .Value = "b", 
         .Text = "b" 
    } 
} 

@Html.DropDownList("RoleList", list, "Select Role")