ASP.net MVC Call Action при изменении значения DropDown - PullRequest
1 голос
/ 13 октября 2010

У меня есть раскрывающийся список одного из моих просмотров.Этот выпадающий список только для записей.В основном мне нужно знать, как вызывать действие при изменении раскрывающегося значения?

Моя ситуация такова: я делаю простую страницу входящих сообщений.В раскрывающемся списке есть параметры фильтра: «Просмотреть все», «Просмотреть приглашения», «Просмотреть ответы» и т. Д..

Есть идеи?Я предполагаю, что каким-то образом это будет скрипт, прикрепленный к OnChange раскрывающегося списка, но я не имею понятия, что такое синтаксис или как вызвать действие MVC из скрипта.

1 Ответ

7 голосов
/ 13 октября 2010

Вы должны использовать JavaScript для этого.Вот пример.Предположим, у вас есть следующая модель представления:

public class MyViewModel
{
    public IEnumerable<SelectListItem> Values { get; set; }
}

, которую вы бы заполнили в своем контроллере:

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            Values = new[] 
            {
                new Item { Value = "1", Text = "Item 1" },
                new Item { Value = "2", Text = "Item 2" },
                new Item { Value = "3", Text = "Item 3" }
            }
        };
        return View(model);
    }
}

А затем представление, строго привязанное к этой модели:

<%: Html.DropDownListFor(x => x.SelectedValue, 
    new SelectList(Model.Values, "Value", "Text"), 
    new { id = "items" }
)%>

Последняя часть - регистрация события изменения (в этом примере используется jquery):

$(function () {
    // Register for the change event of the drop down
    $('#items').change(function () {
        // When the value changes, get send an AJAX request to the
        // Filter action passing the selected value and update the
        // contents of some result div with the partial html returned
        // by the controller action
        $('#result').load('<%: Url.Action("filter") %>', 
            { selectedValue: $(this).val() }
        );
    });
});
...