【问题标题】:MVC- receive selected Dropdownlist value in [HttpPost] method on change eventMVC-在更改事件的 [HttpPost] 方法中接收选定的下拉列表值
【发布时间】:2026-01-11 01:55:01
【问题描述】:

嘿.. 如何在更改事件的 [HttpPost] 方法中接收选定的下拉列表值?我总是在 [HttpGet] 方法中接收它。

<%: Html.DropDownListFor(model => model.TipTpa, ViewData[ArtikliKonstante.vdListaTipovaTPa] as IEnumerable<SelectListItem>, 
                new { onchange = "location.href='/Artikli/PromjenaTipa? p='+this.value"})%>    

如果我将我的方法声明为 [HttpPost],则会出现错误,该操作不存在。任何的想法? 谢谢

【问题讨论】:

    标签: asp.net-mvc-2 html-helper html.dropdownlistfor


    【解决方案1】:

    如果要调用正确的操作,则需要 POST。在您的情况下,您只是重定向 (window.location.href) 发送 GET 请求。

    因此,您可以将下拉菜单放在表单中,并在选择更改时使用 javascript 提交表单:

    <% using (Html.BeginForm("PromjenaTipa", "Artikli", FormMethod.Post, new { id = "myform" })) { %>
        <%: Html.DropDownListFor(
            model => model.TipTpa, 
            ViewData[ArtikliKonstante.vdListaTipovaTPa] as IEnumerable<SelectListItem>, 
            new { id = "tipTpa" }
        ) %>
    <% } %>
    

    然后在 javascript 中订阅 change 事件(以 jquery 为例):

    $(function() {
        $('tipTpa').change(function() {
            $('#myform').submit();
        });
    });
    

    这会将表单发布到PromjenaTipa 操作,您可以在其中读取所选值:

    [HttpPost]
    public ActionResult PromjenaTipa(string tipTpa)
    {
        // tipTpa should contain the selected value
        ...
    }
    

    另一种可能性是在更改事件中发送 AJAX 查询。在这种情况下,您不需要表单,因为您可以使用 AJAX 发送 POST 请求。

    【讨论】:

      最近更新 更多