如何在mvc中使用jquery渲染视图?

时间:2012-02-17 16:24:52

标签: jquery ajax asp.net-mvc json

当我创建一个区域时,我使用JQuery来调用动作创建动作保存到db并返回jsaon现在保存时我想要渲染到我的索引视图我该怎么做?我的代码是有可能的吗? 我试图用jquery调用动作索引,它对动作调用良好但不渲染到视图索引

 [HttpPost]
        public ActionResult Create(int? id,string nombre, int idDpto )
        {
            try
            {
                if (id != null)
                {

                    Area c = (from x in db.Areas
                              where x.AreaId == id
                                      select x).First();
                    c.NombreArea = nombre;
                    c.DepartamentoId = idDpto;
                    db.SaveChanges();

                    return Json(new { ok = true, message = "saved employee " });
                }

                    Area e = new Area()
                    {
                          NombreArea = nombre,
                          DepartamentoId = idDpto
                    };
                    db.Areas.Add(e);
                    db.SaveChanges();
                    return Json(new { ok = true, message = "saved employee " });//+ emp.NameEmployee
            }
            catch (Exception ex)
            {

                return Json(new { ok = false, message = ex.Message });
            }
        }


function saveEmployee() {

        var urlSave = '@Url.Action("Create")';
        var iddpt = $("#cmbDept").val();
        var name = $("#txtemp").val();
        var idArea = $("#AreaId").val();
        if (!name) {
            window.alert('el nombre y el departamento son requeridos');
        }
        else {

            if (! iddpt) {
                window.alert('el departamento es requerido');    
            }
            else {
                $.ajax({
                    type: "POST",
                    url: urlSave,
                    data: { id: idArea, nombre: name, idDpto: iddpt },
                    success: function (returndata) {
                        if (returndata.ok) {
                            window.alert(' Guardado ');
                        }
                        else {
                            window.alert(' error : ' + returndata.message);
                        }

                    }
                }
                    );
            }
        }
    }

1 个答案:

答案 0 :(得分:4)

这里的根本问题是JavaScript中的AJAX调用与常规Web请求之间的区别。从服务器的角度来看,没有太大的区别。这就是浏览器处理这些内容的方式。

您的Create操作已设置为由您正在执行的AJAX调用使用。这一切都很好。但我认为Index不是。那个人希望是一个常规请求。正如我所说,从服务器的角度来看,确实没有区别。所以,正如您所观察到的,对Index的调用恰好发生了。它只是不在浏览器中“渲染”。

这里的术语有点混淆。您不希望“使用jQuery呈现视图”,您希望指示浏览器发出该请求。什么时候应该发生?我假设你希望这个重定向可能发生在你的AJAX调用中的success之后?

如果您希望JavaScript重定向,那么您就是在正确的轨道上。只是采用不同的方法。 jQuery不以AJAX方式调用Index视图(因为它不知道如何处理响应)。只需使用对redirect the user to another resource的JavaScript调用:

window.location.href = "http://yourserver/controller/action/etc";