ASP.NET MVC 3 DropDownList выбран в обмене - PullRequest
5 голосов
/ 31 октября 2011

У меня есть часть функциональности, которая позволяет пользователям фильтровать записи на основе их собственных кодов состояния. В меню у меня есть раздел пользовательских фильтров:

<h3>Custom Filters</h3>
 <br />
   <ul id="ui-ajax-tabs">
      @{ Html.RenderAction("GetGroups", "Manage");}
    </ul>

И мой частичный вид выглядит так:

@model IEnumerable<AllEngage.Model.Group>

@using AllEngage.Web.Helpers

@foreach (var group in Model)
{
    <li>
        <label for="@group.GroupName">@group.GroupName</label>
        @Html.DropDownList("GroupItems", group.GroupItems.ToSelectListItems())
    </li>
}

Когда элемент выбран из выпадающего списка, я хочу, чтобы в моем контроллере был запущен метод действия:

[HttpGet]
public ActionResult Index(int page = 1, int groupFilterId = -1)

Каким будет лучший путь? Уволить с помощью JSON или выполнить пост обратно как-нибудь?

Ответы [ 3 ]

8 голосов
/ 31 октября 2011

Вы должны передать свой параметр к действию. Самый быстрый способ сделать это - пройти через строку запроса с тем же именем, что и параметр в действии:

http://mysite/GetGroups?groupFilterId=2

Чтобы обновить его, вам нужно отправить ajax-запрос с параметром, который будет запущен onchange из раскрывающегося списка. Укажите некоторый идентификатор для вашего фильтра:

@Html.DropDownList("GroupItems", group.GroupItems.ToSelectListItems(), new {@id="ddlFilter"})

и затем с помощью jQuery сделайте GET запрос ваших данных:

$('#ddlFilter').change(function() {
  var queryLink = '@Url.Action("GetGroups")';
  if ($(this).val() != '') {
      queryLink += '?groupFilterId=2';
  }

  $.get(queryLink, function(data) {
      $('#ui-ajax-tabs').html(data);
  });
});   
1 голос
/ 31 октября 2011

вам нужно запустить ajax-вызов, используя jquery в выпадающем меню click. Сначала проверьте событие нажатия на выпадающее меню, если значение изменилось, затем вызовите jjery ajax call Я вставляю код jquery.

 $.get("/Wk/Revision/@hTitle/@pageID/?langID=2", function (data) {
                    $("div#dAjaxContent").html(data);
                    $("div#dShow").css("visibility", "visible");
                    $("#dShow").dialog();
                });

// это для вызова ajax. выпадающий список сделай сам. "/ Wk / Редакция / @ hTitle / @ PageId /? LANGID = 2" это вызовет ревизию метода контроллера. а дальше я думаю, что ты сделаешь.

0 голосов
/ 31 октября 2011

Я бы рекомендовал сделать запрос по почте; Вы можете построить один, используя это:

http://iridescence.no/post/Invoking-ASPNET-MVC-Actions-from-JavaScript-using-jQuery.aspx

Вы можете сделать запрос на получение AJAX, или, если вы хотите перенаправить, вы можете изменить window.location в JavaScript, чтобы он указывал на желаемое действие, например:

window.location = "/MyController/Index";
...