use*_*014 2 api ajax asp.net-mvc
我的网站像 http://mysite.com/,在索引页面上我有搜索框,结果我使用的是jqgrid.当用户点击jqgrid行中的行时,我从单元格中获取数据并对服务器执行ajax调用并获取json数据,一旦数据到达,我将隐藏搜索框和jqgrid并显示另一个div,这是我保留的结果.简而言之,用户将在同一页面上只是div的隐藏/显示.
现在我已经看过历史api并使用了pushState和popstate,所以我的url变成了地址栏,如http://mysite.com/controller/action/para1/para2(这里para1和para2是我传递给行动的参数).到目前为止一切都还可以.
现在的问题是,如果我复制这个URL" http://mysite.com/controller/action/para1/para2 ",如果我打开它,让我们说不同的浏览器并点击输入它只显示json数据.所以,我很困惑,当用户直接在控制器中使用该url时如何处理.
我正在考虑检查控制器动作,如果请求是AJAX然后返回json数据,否则整页,是正确的方法?或者我们在客户端的东西,以便它加载与以前相同的方式.
谢谢
如果我复制这个URL" http://mysite.com/controller/action/para1/para2 ",如果我打开它,让我们说不同的浏览器并点击输入它只显示json数据.
它只显示json数据,因为它的ajax调用只是如此处理,以便它也显示相同的页面甚至用户直接访问url.
我想你要找的是Request.IsAjaxRequest():
public class FooController : Controller {
public ActionResult GetFoo(int id) {
var model = _fooService.Get(id);
if (Request.IsAjaxRequest())
return PartialView("_Foo", model);
return View("Foo", model);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:建议使用WebAPI控制器仅处理json数据.因此,如果用户通过键入url到达那里,mvc控制器将处理它,如果你需要获取该视图的json数据,你可以调用webapi控制器.
| 归档时间: |
|
| 查看次数: |
695 次 |
| 最近记录: |