ASP.NET MVC2下拉列表和URL.action

问题描述

| 我有一个Dropdownlist,需要在其OnChange事件上使用选定的Dropdownlist值的参数值调用控制器上的操作。 这就是我现在所拥有的。
<%= 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方法。 谢谢,     

解决方法

一种非常简单的方法是将您要调用的网址用作下拉菜单中选项的值。还有其他方法可以做到,但这是最基本的方法:
<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);
});
其他执行此操作的方法: 将下拉列表包装为表单,然后在选择新项时通过jQuery将表单发布(控制器将仅以HTTP请求参数的形式接收下拉列表的值) 每次更改下拉列表时动态创建一个请求。因此,除了请求
$(this).val()
之外,您还可以请求存储在某处的某些网址并将
$(this).val()
作为数据部分传递::6ѭ 编辑:这是第一种选择的更详细说明(为方便起见,在Razor中完成,为清晰起见,使用了显式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);
});