重定向动作链接与ASP.NET MVC3中的更改URL

时间:2012-02-04 06:13:35

标签: .net asp.net-mvc asp.net-mvc-3 telerik

我想对自动回复进行下拉列表。 我在表格上的表格:

@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>

我通过Ajax从Index视图发送Post数据到服务器,在操作数据之后我需要在表单上更新数据。我怎么能这样做?我尝试重定向到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);
    }

但我的页面没有刷新,网址没有更改,数据也没有更新...... 有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:1)

  

我想对自动回复进行下拉列表。我在表格上的表格:

执行标准表格提交:

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

并返回相同的View(使用预填充模型):

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

或者您想通过AJAX制作吗?如果是这样,请改用Ajax.Form:

@using (Ajax.BeginForm(...)) {
    ...
}

答案 1 :(得分:1)

DropDownList更改事件是ajax操作。我认为你不能在服务器端重定向。但您可以在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);
    }