尝试使用Jquery post和ActionResult刷新页面

时间:2013-08-05 20:07:31

标签: javascript jquery asp.net-mvc-4 http-post redirecttoaction

我一直试图让“RedirecttoAction”声明在这里工作,但它没有让步。这是方法:

    [HttpPost]
    public ActionResult UpdateTech(int tech, int id)
    {
        Callout callout = db.Callouts.Find(id);
        callout.TechnicianId = tech;
        callout.TechStatus = "ASSIGNED";
        db.Entry(callout).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("CalloutAdmin/Index/");
    }

它由以下JQuery调用,它完美运行:

$(function () {
        $(".techdropdown").change(function () {
            var recordToUpdate = $(this).attr("id");
            var selectedTech = $(".techdropdown option:selected").val();
            window.alert(selectedTech);
            $.post("/CalloutAdmin/UpdateTech?tech=" + selectedTech + "&id=" + recordToUpdate);
        });
    });

唯一没有发生的事情是刷新页面,这是重定向应该做的事情。有人可以建议吗?

更新

我要做的是更新此Callout对象,而不重定向到另一个视图。我从下拉列表中选择技术人员,它会自动将标注的技术人员值设置为我从下拉列表中选择的值。

2 个答案:

答案 0 :(得分:2)

您将重定向返回到AJAX请求,并且AJAX请求正在后台加载页面。如果你想让整个页面重定向,你可能想在jQuery中使用成功回调

$.post("/CalloutAdmin/UpdateTech?tech=" + selectedTech + "&id=" + recordToUpdate, function() { document.location = "CalloutAdmin/Index/"; } );

如果您想让操作控制重定向的位置,您可能希望使用从您的操作返回JsonResultContentResult,并从中输出的URL具有jQuery的成功回调重定向用户。

答案 1 :(得分:1)

假设UpdateTech和Index都属于CallOutAdminController,那么将UpdateTech方法更改为:

[HttpPost]
public ActionResult UpdateTech(int tech, int id)
{
    Callout callout = db.Callouts.Find(id);
    callout.TechnicianId = tech;
    callout.TechStatus = "ASSIGNED";
    db.Entry(callout).State = EntityState.Modified;
    db.SaveChanges();
    return RedirectToAction("Index","CallOutAdmin");
}

然后让你像这样的jQuery函数:

$(document).ready(function(e) {
    $(".techdropdown").change(function () {
        var recordToUpdate = $(this).attr("id");
        var selectedTech = $(".techdropdown option:selected").val();
        window.alert(selectedTech);
        window.location = "/CallOutAdmin/UpdateTech?tech=" + selectedTech + "&id=" + recordToUpdate
    });
});