RPM*_*984 2 javascript asp.net-mvc asp.net-mvc-routing razor asp.net-mvc-3
什么是避免在JavaScript中硬编码URL的最佳方法(主要用于进行AJAX调用时)?
在过去:
@Url.Action
或的结果呈现JavaScript变量@Url.RouteUrl
@Url.Action
或@Url.RouteUrl
成JavaScript在初始化/构造函数.有没有更好的办法?
做这样的事情会很好:
var url = $.routes("actionName", "controllerName") // or "routeName" for named routes
$.post(url, { id = 1 }, function() { //.. });
Run Code Online (Sandbox Code Playgroud)
这当然不可能实现(JavaScript没有直接访问ViewContext,因此无法访问路由表).
但我想知道是否有一种方法可以为JavaScript设置我自己的"路由表",只有我知道它需要的那些?(例如我在视图中设置)
人们如何处理这个问题?
尽管在视图中注入javascript我更喜欢 - 让HTML完成它的工作,javascript就可以了.以下是模式.
/*A cssclass=ajaxlink is added to all those links which we want to ajaxify*/
//html in view
<a class='ajaxlink' href='@Url.Action("Action","Controller")'>I am An Ajax Link</a>
//generated clean html
<a class='ajaxlink' href='/controller/action'>I am An Ajax Link</a>
//Js
jQuery('.ajaxlink').live('click',function(e){
e.preventDefault(); /*Prevent default behavior of links*/
var url= $(e.target).attr('href');
/*
Now u have url, do post or get:
then append received data in some DOM element.
*/
});
Run Code Online (Sandbox Code Playgroud)
//控制器
public ActionResult()
{
if(Request.IsAjax())
{
/*Return partial content*/
return View();
}
else
{
return View("SomeOther_View.cshtml");
/*
At this point you may reject this request or return full view
whatever you feel is okie.
*/
}
}
Run Code Online (Sandbox Code Playgroud)
这样,两种类型的用户都可以启用javascript并禁用javascript.
表格也可以这样做.
归档时间: |
|
查看次数: |
3196 次 |
最近记录: |