2011-04-14 62 views
0

我有一個下拉列表,它需要在其OnChange事件上使用所選Dropdownlist值的參數值在控制器上調用操作。ASP.NET MVC2下拉列表和URL.action

這就是我現在所擁有的。

<%= Html.DropDownList("series",              
      new SelectList((IEnumerable)ViewData["series"], "ProductId", "SeriesName"), 
         new { onchange = "??" })%> 

我可以附上清單表單元素

<form id="SeriesForm" action="<%: Url.Action("S", "ProductSearch", new {SeriesId = ?? }) %>" method="post"> 

但是我怎麼設置這應該是下拉菜單的選擇值SeriesId參數?我試圖附加一個jQuery方法的OnChange事件,但我無法更改Url.Action方法。

感謝,

回答

1

一個非常簡單的方法是使用你想要作爲下拉選項的值來調用URL。還有其他的方法來做到這一點,但是這是最準系統:

<select id="myList" ...> 
<% foreach (var id in ids) { %> 
    <option value="<%= Url.Action("Action", "Controller", new { id = id }) %>">id</option> 
<% } %> 
</select> 

然後再從jQuery的,剛拿到的網址是這樣的:

$('#myList').change(function(){ 
    $.get($(this).val(), doOnSuccess); 
}); 

其他的方法可以做到這一點:

  1. 將下拉列表封裝在表單中,並在選擇新項目時通過jQuery發佈表單(控制器將僅接收下拉的值作爲HTTP請求參數)
  2. 每次下拉改變時動態地創建一個請求。因此,而不是請求$(this).val()你會要求你的地方存放一些網址,並通過$(this).val()的數據部分:$.get($('#storeMyUrl').val(), $(this).val(), doOnSuccess)

編輯:這裏的第一選擇(在剃刀做了安逸的更詳細的解釋,並與明確的html爲清晰(希望)):

<form id="theForm" action="@Url.Action("A", "C")" method="POST"> 
    @Html.DropDownList("paramName", theSelectListAsInTheQuestion, new { id = "theDropDown" }) 
</form> 

... 

public class CController : Controller { 
    [HttpPost] 
    public ActionResult A (int paramName) { 
     ... 
    } 
} 

... 

// and in jQuery 
$('#theDropDown').change(function(event){ 
    var f = $('#theForm'); 
    $.post(f.attr('action'), f.serialize(), onSuccess); 
}); 
+0

Milimetric,感謝您的意見。你能否詳細說明你以其他方式提到的第一個替代方案(即,封裝在表單中,然後使用HTTP請求參數獲取下拉的值)? – fjxx 2011-04-14 21:29:25

+0

感謝詳細解釋Milimetric - 但我嘗試過,但它不起作用。 – fjxx 2011-04-15 03:23:27

+0

你是什麼意思的「它不工作」?我只是自由編碼,也許我犯了一個愚蠢的錯誤,但上面的方法絕對正確。 – Milimetric 2011-04-15 12:16:51