ссылка перенаправления действия с изменением URL в ASP.NET MVC3 - PullRequest
0 голосов
/ 04 февраля 2012

Я хочу сделать автоответчик в выпадающий список. Моя форма на просмотр:

@using (Html.BeginForm("Index", "Model", FormMethod.Post))
{
            @(Html.Telerik().DropDownList()
                .Name("ddlBrands")
                .BindTo((IEnumerable<SelectListItem>)ViewData["brands"])
                .ClientEvents(events => events
                                  .OnChange("onDropDownListChange")
                )
            )
            <input type="submit" value="OK" />

    <table style="margin:15px; margin-left:0px;">
        @foreach (var item in Model) {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.FullModel)
                </td>
                <td>
                    @Html.ActionLink("Edit", "Edit", new { id=item.ModelID }) |
                    @Html.ActionLink("Delete", "Delete", new { id=item.ModelID })
                </td>
            </tr>
        }
    </table>
}

и JavaScript:

<script type="text/javascript">
    function onDropDownListChange(e) {
        SimpleAjaxRequest('/Model/Index', e.value);
    }

    function SimpleAjaxRequest(url, requestData) {
        return $.ajax(
        {
            type: 'POST',
            url: url,
            async: true,
            data: { ddlBrands: requestData },
            dataType: "json",
            traditional: true
        });
    }
</script>

Я отправляю данные Post через Ajax из представления Index на сервер, и после манипуляций с данными мне нужно обновить данные в моей форме. как я могу это сделать? Я пытаюсь перенаправить на POST действие

[HttpPost]
        public ActionResult Index(string ddlBrands)
        {
            SetBrandItems();
            return RedirectToAction("Index", "Model", new {ddlBrands = ddlBrands});
        }

после вызова действия GET

 public ActionResult Index(int? ddlBrands)
    {
        SetBrandItems();
        List<Model> m = dm.GetModelsByBrandId(ddlBrands).ToList();
        return View(m);
    }

но моя страница не обновляется и URL не изменяется, а данные не обновляются ... кто-нибудь может мне помочь?

Ответы [ 2 ]

1 голос
/ 04 февраля 2012

Событие изменения DropDownList является операцией ajax.Я думаю, что вы не можете перенаправить на стороне сервера.Но вы можете добавить rediect в обратный вызов ajax.

например:

 function SimpleAjaxRequest(url, requestData) {
    return $.ajax(
    {
        type: 'POST',
        url: url,
        async: true,
        data: { ddlBrands: requestData },
        dataType: "json",
        traditional: true,
        success: function() {
            //callback redirect 
            location.href = '/Model/Index';
        }
    });
}

    [HttpPost]
    public ActionResult Index(string ddlBrands)
    {
        SetBrandItems();
        return Json(null, JsonRequestBehavior.AllowGet);
    }
1 голос
/ 04 февраля 2012

Я хочу сделать автоответ в выпадающий список.Моя форма в представлении:

заполните стандартную форму, отправив:

function onDropDownListChange(e) {
    $("form").submit();
}

и верните то же представление (с предварительно заполненной моделью):

[HttpPost]
public ActionResult Index(string ddlBrands) {
    SetBrandItems();
    return View("Index", new { ddlBrands = ddlBrands });
}

или вы хотите сделать это через AJAX?Если это так, используйте вместо этого Ajax.Form:

@using (Ajax.BeginForm(...)) {
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...