Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 控制器可以根据结果返回JSON或HTML_Jquery_Ajax_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

Jquery 控制器可以根据结果返回JSON或HTML

Jquery 控制器可以根据结果返回JSON或HTML,jquery,ajax,asp.net-mvc,asp.net-mvc-4,Jquery,Ajax,Asp.net Mvc,Asp.net Mvc 4,假设我有一个包含表单的弹出窗口。我必须有一个处理表单的控制器,根据结果,该控制器返回JSON(如果一切顺利,弹出窗口可以通过javascript关闭)或HTML(如果表单数据无效,表单必须替换为新的HTML,并显示验证错误消息)。 所以我找到了这样一个解决方案:那就是形式: <form id="message" ...> ... </form> 控制器: [HttpPost] public ActionResult UpdateMessage(MessageMo

假设我有一个包含表单的弹出窗口。我必须有一个处理表单的控制器,根据结果,该控制器返回JSON(如果一切顺利,弹出窗口可以通过javascript关闭)或HTML(如果表单数据无效,表单必须替换为新的HTML,并显示验证错误消息)。 所以我找到了这样一个解决方案:那就是形式:

<form id="message" ...>
    ...
</form>
控制器:

[HttpPost]
public ActionResult UpdateMessage(MessageModel model)
{
    ...
    if (.. is valided ..)
        return Json(new { success = "OK" });
    else
        return View(model);
}

问题是,对于这样的任务,有没有更优雅的解决方案?

我想这是解决这个问题的一个非常好的解决方案,我肯定会使用它。

你的方法看起来不错。但是,如果您的JSON错误消息对于所有屏幕都是通用的,我建议您可以在这种情况下编写一个操作过滤器。因此,我们可以使代码更加优雅

[HttpPost]
[JsonErrorHandling]
public ActionResult UpdateMessage(MessageModel model)
{    
    return View(model);
}

public class JsonErrorHandlingAttribute : ActionFilterAttribute, IActionFilter 
{
   void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
   {
      // TODO: doing some thing magic here
      // if (.. is valided ..)
      //  return Json(new { success = "OK" });

      this.OnActionExecuting(filterContext);
   }
}

如果需要从URL返回多个数据类型,则无需在jQueryAjax调用中传递该数据类型`

  $.ajax({
    type: "GET",
    url: url,
    data: data,
    //dataType: "json",  comment this line
    cache: false,
    beforeSend: function () {},
    success: function (data) {},
    error: function (xhr, ajaxOptions, errorThrown) {}
  });

为什么不在json键中返回html以保持清晰,并简单地检查是否设置了错误键?@fliespl,在服务器上将ASP.NET MVC视图呈现为字符串并将这些部分序列化为json有点麻烦。真的吗?如果我没记错的话,你只需要几行就可以渲染部分-可能与代码中的数字相同:)@fliespl,是的,有一些黑客可以做到这一点,但我总是发现它们,嗯,黑客。@DarinDimitrov我不是ASP.NET的专家-我只记得在这种情况下重新定义了partials-很高兴知道这些都被视为黑客。同意,您的解决方案没有问题。看起来不错。好的,谢谢你的回答。我只是觉得类似的任务经常发生,也许有一些标准的解决方案。因此,为了避免重新发明方形轮子,不知道世界各地长期以来都喜欢圆形轮子:)在我的例子中,如果一切正常,控制器将返回JSON。错误将返回到HTML中。而“TODO”必须在客户端执行-在java脚本中。但是谢谢你的回答——在另一个地方它对我很有用;)
  $.ajax({
    type: "GET",
    url: url,
    data: data,
    //dataType: "json",  comment this line
    cache: false,
    beforeSend: function () {},
    success: function (data) {},
    error: function (xhr, ajaxOptions, errorThrown) {}
  });