2009-09-05 118 views
0

在这一刻我打电话给我的索引视图的两种方式之一。使用正常的http视图并将其序列化为JSON。为了测试它,我使用下面的代码,并且它工作。我想通过http调用来获取它。赞(类似http://localhost/article,json什么的。任何想法。如何模拟来自HTTP GET调用的JSON调用?

$.getJSON("/Article", function(json) { 
      $.each(json, function(i, article) { 
       alert(article.title); 
      }); 
     }); 

此时调用索引/文章在被分化与以下IsAjaxRequest方法。但我真正的问题是,如果我能够得到各地.getJSON在JQuery的方法来测试下面的代码。

if (Request.IsAjaxRequest()) 
      { 
       return Json(articles); 
      } 
      else 
      { 
       return View(articles); 
      } 

回答

1

如果你想重复使用相同的操作方法两个完整的GET(页面加载)和AJAX调用(通过的getJSON),你会碰到因为每个动作方法都应该有一个唯一的名字,否则,MVC引擎无法分辨出哪个动作方法应该被调用请求Url。

您需要两个单独的操作:一个用于完整页面加载,返回ViewResult,另一个用于返回JsonResult的AJAX调用。如果你需要这些动作的Url看起来一样,你也可以使用映射路线指向不同的动作方法。

那么,怎么样:

/条/索引 映射到默认的索引操作(全页面加载)

/条/刷新 映射到刷新动作(异步JSON调用)

0

我不确定我是否正确地理解了这个问题,但是您不能制作一个名为“format”的可选参数,以便您传递?format = json来切换返回的回复类型。

if(Request.IsAjaxRequest() || (!string.IsNullOrEmpty(format) && format.Equals("json")) 
{ 
    ... 
} 
0

如果你想知道如何测试你的行动和你谈论的是做自动化测试,看看是否this post回答你的问题。