Controller必须提供JsonResult或重定向才能查看

时间:2011-04-07 10:47:47

标签: asp.net-mvc json extjs

我有一个带有standardSubmit的错误的ExtJs formpanel:false。在提交时,控制器将验证formdata,因为将在服务器上进行一些验证(例如,检查名称是否唯一)。如果提供的实体无效,则会向客户端发送JsonResult以通知用户哪些字段无效。这非常有效。如果实体有效,它将存储在数据库中,并且控制器必须将用户重定向到特定视图。

结果是视图提供的HTML被发送到需要JSON响应的客户端。显然,这不起作用。

public override ActionResult Create(FormCollection formCollection)
    {
        Models.Relatie relatie = Repository.CreateNew();
        SetFormValues(relatie, formCollection);

        if (ModelState.IsValid)
        {
            _relatieService.CreateRelation(relatie);
            ViewResult view = View("Index");
            return view; //pumps html while client expects JSON
        }
        else
        {
            JsonResult json = Json(new { success = false, errors = ModelState.ToDictionary() });
            return json;
        }
    }

我一直在寻找解决方案超过8小时,有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

发回一个success属性设置为true的JSON对象。在AJAX调用的成功处理程序中检查这一点,并使用javascript(window.location = indexLink)重定向。

值得注意的是,如果您想要生成链接服务器端并且您正在使用Web表单视图引擎,则需要执行以下操作以在页面中嵌入脚本变量:

<%= "<script language=\"javascript\"> var indexLink = \"" + Url.Action("Index") + "\";</script>" %>

然后,您可以在页面中使用indexLink