【问题标题】:MVC Blank JsonResultMVC 空白 JsonResult
【发布时间】:2015-01-08 18:24:11
【问题描述】:

我正在返回一个 JsonResult 作为 Orchard CMS 站点 (MVC 4) 的一部分,但它突然停止工作(具体如下)。

这是我的控制器的一个例子:

public JsonResult GetStartDate()
{
    //a previous version of this question was different here
    var startDate = _Settings.DateOpen.GetValueOrDefault(DateTime.MaxValue);
    if (startDate < DateTime.Now)
        startDate = DateTime.Now;


    var start = new
    {
        year = startDate.Time.Year,
        month = (startDate.Time.Month - 1)
    };

    return Json(start, JsonRequestBehavior.AllowGet);
}

它应该返回实际数据。我已经验证了该操作正在被执行,并且“开始”在传递到 Json 方法之前包含正确的数据。

如果我直接导​​航到 URL,我会看到一个空白屏幕。

检查 AJAX 请求的结果显示调用失败,响应正文为空字符串,状态为“parsererror”,实际抛出的错误为“SyntaxError: Unexpected end of input”。

POST 请求因某种原因起作用,此问题仅适用于 GET。

所有 JSON GET 都有这个问题,而不仅仅是任何特定的方法。

什么可能会影响 Json 方法和接收响应的客户端之间的数据?

【问题讨论】:

  • 如果从JsonResult tom ActionResult改变结果类型有什么变化吗?
  • 不。但我之前确实有过改变。当前的 Chrome 突然开始接收结果。我所做的只是再次启动该站点以向某人显示它无法正常工作。 IE、Firefox 和 Chrome Canary 仍未显示。我在两个版本的 chrome 上都禁用了缓存,但没有任何变化。疯狂!
  • 你的方法是否被缓存添加这个装饰器,看看它是否有什么不同[OutputCache(NoStore = true, Duration = 0)]
  • 这似乎奏效了!非常感谢。如果您想编辑之前的答案,我会将其标记为已接受。
  • 我已经在下面更新了我的答案。

标签: asp.net-mvc json


【解决方案1】:

默认情况下,所有 MVC 方法都被缓存。这可能会导致更改/调试周期出现问题。对于初学者,您可以在开发过程中使用下面的装饰器关闭缓存。

[OutputCache(NoStore = true, Duration = 0)] 
public ActionResult MyMethod()

您可能希望使用 web.config 中定义的缓存方案来包装所有方法。这允许通过一个在开发过程中派上用场的配置更改来控制缓存。

 <system.web>
    <caching>
      <outputCacheSettings>
        <outputCacheProfiles>
          <clear />
          <add varyByParam="*" duration="0" name="MyCachePlan" />          
        </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
 </system.web>

并使用以下装饰器:

[OutputCache(CacheProfile = "MyCachePlan")]
public ActionResult MyMethod()

【讨论】:

  • 糟糕!谢谢你抓住那个。不幸的是,这无关紧要。我用(稍微)不同的方法编辑了问题,但方法相同。
猜你喜欢
  • 1970-01-01
  • 2011-03-08
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多