MVC Blank JsonResult

时间:2015-01-08 18:24:12

标签: asp.net-mvc json

我将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);
}

它应该返回实际数据。我已经确认行动正在受到影响,并且“#34; start&#34;在传递给Json方法之前包含正确的数据。

如果我直接导​​航到该网址,我会看到一个空白的白色屏幕。

检查AJAX请求的结果表明调用失败,响应主体为空字符串,状态为&#34; parsererror&#34;并且实际的错误抛出是&#34; SyntaxError:意外的输入结束。&#34;

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

此问题与所有 JSON GET有关,而不仅仅是任何特定方法。

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

1 个答案:

答案 0 :(得分:0)

默认情况下,缓存所有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()