MVC - получить выбранное значение Dropdownlist в методе [HttpPost] при изменении события - PullRequest
1 голос
/ 25 февраля 2011

Эй .. Как получить выбранное значение Dropdownlist в методе [HttpPost] при изменении события? Я всегда получаю его в методе [HttpGet].

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

Если я объявляю свой метод как [HttpPost], я получаю ошибку, это действие не существует. Любая идея? Thx

1 Ответ

3 голосов
/ 25 февраля 2011

Вам нужно 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
    ...
}

Другая возможность - отправить запрос AJAX в событии изменения. В этом случае вам не нужна форма, так как вы можете отправить запрос POST с помощью AJAX.

...