MVC-在更改事件的[HttpPost]方法中接收选定的Dropdownlist值

时间:2011-02-25 07:58:34

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

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

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

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

1 个答案:

答案 0 :(得分:3)

如果要调用正确的操作,则需要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中订阅更改事件(使用jquery的示例):

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

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

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

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