代码之家  ›  专栏  ›  技术社区  ›  redsquare

ASP.NET MVC、JSON和非JavaScript客户端

  •  4
  • redsquare  · 技术社区  · 16 年前

    我是否会在select旁边包装一个submit,并将它们放在自己的表单中,以便使用某个操作或不同的querystring参数发回?同一个控制器可以给我一个部分JSON响应,同时提供完整的HTML响应吗。有谁能告诉我一个好的演示,它利用JSON和普通HTTP帖子在ASP.NETMVC中产生相同的结果。我看到的所有ASP.NET MVC演示/示例都忘记了未启用JavaScript的客户端。

    但是如果我正确地阅读了使用MicrosoftAjax客户端库的Ajax调用,这不是真的吗?我想避免这样做,并且只使用jQuery。道歉应该提到这一点。

    另外,我不希望控制器中到处都是噪音(让我想起webforms中的iPostBack…不寒而栗)。

    遗憾的是,除了[AcceptType(httpTypes.Json)]等内容类型之外,我无法在类似[AcceptVerbs(HttpVerbs.Post)]的控制器上使用任何属性。

    3 回复  |  直到 14 年前
        1
  •  3
  •   rodbv    16 年前

    您可以检查IsMvcAjaxRequest属性并在控制器中使用它,然后返回部分视图(用户控件)或JSON结果(如果为true),或者返回完整视图(如果为false)。

    大概是这样的:

    public ActionResult List()
    {
       if (!Request.IsMvcAjaxRequest())
       {
           // Non AJAX requests see the entire ViewPage.
           return View();
       }
       else
       {
           // AJAX requests just get a trimmed down UserControl.
           return Json(...);
       }
     } 
    

    更多信息请点击此处: MVC AJAX Sites That Gracefully Degrade

        2
  •  1
  •   rodbv    16 年前

    (参考您之前的回答):您可以在Request.Form中传递一个值,以表示这是一个启用或未启用javascript的浏览器,然后创建一个控制器工厂,该工厂将根据您在Request.Form中获得的内容实例化相应的控制器;常规请求的默认控制器(启用javascript的浏览器)和只返回完整视图的“回退控制器”。我不确定拥有两倍数量的控制器是否比围绕单个控制器的if-else语句更好,但我想这是个人偏好的问题。

    打赌