ASP.NET MVC2 Dropdownlist和URL.action

时间:2011-04-14 20:59:42

标签: jquery asp.net-mvc drop-down-menu

我有一个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方法。

谢谢,

1 个答案:

答案 0 :(得分:1)

一种非常简单的方法是使用您要调用的网址作为下拉列表中选项的值。还有其他方法可以做到,但这是最简单的方法:

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

然后从jQuery中获取这样的url:

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

其他方法:

  1. 将下拉包装在表单中,并在选择新项目时通过jQuery发布表单(控制器只会收到下拉列表的值作为HTTP请求参数)
  2. 每次下拉更改时动态创建一个请求。因此,您不会请求$(this).val(),而是请求存储在某处的某个网址,并将$(this).val()作为数据部分传递:$.get($('#storeMyUrl').val(), $(this).val(), doOnSuccess)
  3. 编辑:这里是第一个替代方案的更详细解释(为了方便起见,在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);
    });