ASP.NET MVC Ajax: Как передать значения аргумента в действие Ajax из выбора? - PullRequest
2 голосов
/ 28 октября 2009

Я хотел бы иметь страницу фильтрации, которая выполняет запросы ajax для асинхронного обновления списка результатов.

Есть два комбинированных списка со значениями параметров и один Ajax.ActionLink. Список представляется как частичное представление внутри div.

Я знаю, как реализовать часть контроллера, а также логику взаимодействия. Чего мне не хватает, так это передачи аргументов в вызове Ajax.ActionLink.

Когда пользователь нажимает на ссылку, я хотел бы обновить список, отображаемый как частичное представление "SubList".

    <%= Html.DropDownList("branches", Model.Branches) %>
    <%= Html.DropDownList("regions", Model.Regions) %>
    <%= Ajax.ActionLink("Filter", "SubList", 
        new {branchID = ??, regionID = ??}, 
        new AjaxOptions() { UpdateTargetId = "theList"} ) %>
    <div id="theList">
        <% Html.RenderPartial("SubList", Model.List); %>
    </div>

Действие контроллера, извлекающее данные для частичного представления:

public ActionResult SubList(int branchId, int regionId)
{
    if (this.Request.IsAjaxRequest())
    {
        List<Company> filtered = this.repository.QueryCompanies().Where(c => c.BranchID == branchId && c.RegionID == regionId).ToList();
        return PartialView("SubList", filtered);
    }
    return null;
}

Как передать аргументы branchID и regionID (выбранные значения из двух выпадающих списков на странице) в действие SubList контроллера?

1 Ответ

3 голосов
/ 28 октября 2009

Это должно быть сделано в javascript или с использованием form вместо anchor. Там нет ничего, что вы могли бы поставить на место вашего ??, чтобы заставить его работать. Вы не можете установить эти значения на стороне сервера, потому что они могут быть изменены на стороне клиента. Поэтому в основном вам нужно подключиться к событию onchange двух ваших селекторов и обновить URL ссылки новыми значениями или просто использовать form.

Что-то между строк:

<% using (Ajax.BeginForm("SubList", new AjaxOptions() { 
    UpdateTargetId = "theList" 
})) { %>
    <%= Html.DropDownList("branchId", Model.Branches) %>
    <%= Html.DropDownList("regionId", Model.Regions) %>
    <input type="submit" value="Filter" />
<% } %>

<div id="theList">
    <% Html.RenderPartial("SubList", Model.List); %>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...