【问题标题】:ASP.NET MVC2 Dropdownlist and URL.actionASP.NET MVC2 下拉列表和 URL.action
【发布时间】:2013-03-20 07:24:17
【问题描述】:

我有一个下拉列表,它需要在控制器上使用其 OnChange 事件中所选下拉列表值的参数值调用一个操作。

这就是我现在拥有的。

<%= 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 方法。

谢谢,

【问题讨论】:

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


    【解决方案1】:

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

    <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(),不如请求存储在某处的一些url,并将$(this).val() 作为数据部分传递:$.get($('#storeMyUrl').val(), $(this).val(), doOnSuccess)

    编辑:这里是第一个替代方案的更详细解释(为方便起见,在 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);
    });
    

    【讨论】:

    • Milimetric,感谢您的 cmets。您能否进一步详细说明您在其他方法中提到的第一个替代方法(即包装在表单中,然后使用 HTTP 请求参数获取下拉列表的值)?
    • 感谢 Milimetric 的详细解释 - 但是我试过了,但它不起作用。
    • “它不起作用”是什么意思?我只是徒手编码,也许我犯了一个愚蠢的错误,但上面的方法绝对是正确的。
    • 逻辑是正确的,但我仍然遇到一些错误。无论如何,我使用调用 windows.location 重定向的 javascript 函数解决了这个问题,我在下拉列表的 onChange 事件中调用了 js 函数,并将下拉列表的值传递给函数。您的方法也可以,因此我会将您的答案标记为解决方案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    相关资源
    最近更新 更多