2011-04-14 2 views
0

У меня есть Dropdownlist, которому нужно вызвать действие на контроллере со значением параметра выбранного значения Dropdownlist в его событии OnChange.ASP.NET MVC2 Dropdownlist и URL.action

Это то, что я имею прямо сейчас.

<%= 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.

Спасибо,

ответ

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)

EDIT: вот более подробное объяснение первого варианта (сделано в бритве для простоты, и с явный 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); 
}); 
+0

Milimetric, спасибо за ваши комментарии. Можете ли вы подробнее остановиться на первом альтернативе, который вы упомянули другими способами для этого (т. Е. Обертыванием формы, а затем захватом значения выпадающего списка с помощью параметра HTTP-запроса)? – fjxx

+0

Спасибо за подробное объяснение Milimetric - однако я попробовал, но он не работает. – fjxx

+0

Что значит «это не работает»? Я просто кодировал свободные руки, возможно, я сделал глупую ошибку, но подход выше определенно правильный. – Milimetric