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

发布于 2024-11-01 01:52:50 字数 626 浏览 0 评论 0原文

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

谢谢,

I have a Dropdownlist which needs to call an action on a controller with the parameter value of the selected Dropdownlist value on its OnChange event.

This is what I have right now.

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

I can enclose the list in a form element

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

But how do I set the SeriesId parameter which should be the selected value of the dropdown? I tried attaching a jQuery method to the OnChange event but I am not able to change the Url.Action method.

Thanks,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

轻许诺言 2024-11-08 01:52:50

一个非常简单的方法是使用您要调用的 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() 作为数据部分传递: < code>$.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);
});

A really simple way is to use the url you want to call as the value of the options in the dropdown. There are other ways to do it, but that's the most bare-bones:

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

And then from jQuery, just get the url like this:

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

Other ways to do this:

  1. wrap the drop down in a form and post the form it via jQuery when a new item is selected (the controller would just receive the value of the drop down as an HTTP request parameter)
  2. dynamically create a request every time the drop down is changed. So instead of requesting $(this).val() you would request some url you stored somewhere and pass $(this).val() as the data part: $.get($('#storeMyUrl').val(), $(this).val(), doOnSuccess)

EDIT: here's a more detailed explanation of the first alternative (done in Razor for ease, and with explicit html for clarity (hopefully)):

<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);
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文