在我当前使用asp.net MVC 3(使用剃须刀)的项目中,当我进行Ajax调用时,我必须将JS保留在视图页面上,因为我想使用Url.Action来生成URL。这意味着我不能将js代码拆分为.JS文件,是否有比我目前所做的更好的解决方案。在javascript代码中使用Url.Action的更好的解决方案
23
A
回答
17
我倾向于以类似上述方式完成此操作,稍微不同的扭曲,因为我喜欢命名空间我的JavaScript。
JavaScript文件看起来像:
var my = {};
my.viewname =
{
init : function(settings){
// do some work here. settings.someImportantUrl has my json/ajax url eg.
alert(settings.someImportantUrl);
}
}
然后,我的观点将包含这样的内容:
<script language='javascript'>
// allocate an object with variables you want to use in the external js file
var settings = {someImportantUrl: '<%=Url.Action(...)%>'};
// call an init method for the current view
my.viewname.init(settings);
</script>
10
您只能在视图中定义url并将所有其他javascript代码保存在.js文件中。
有从视图代码在我MVC.NET 1应用:
<script type="text/javascript" src="<%=Url.Content("~/Scripts/Account/ManageUsers.js")%>"></script>
<script type="text/javascript" src="<%=Url.Content("~/Scripts/Account/ManageUsersAndGroups.js")%>"></script>
<script type="text/javascript">
var getUsersUrl = '<%= Url.Action("GetUsers", "Account") %>';
var getUserDetailsURL = '<%= Url.Action("GetUserDetails", "Account") %>';
<%If Not ViewData("readOnly") Then%>
var changeRolePermissionsUrl = '<%= Url.Action("ChangeRolePermissions", "Account") %>';
var deleteUserUrl = '<%= Url.Action("DeleteUser", "Account") %>';
var resetPasswordUrl = '<%= Url.Action("ResetPassword", "Account") %>';
var updateUserGroupsUrl = '<%= Url.Action("UpdateUserGroups", "Account") %>';
var updateUserDetailsUrl = '<%= Url.Action("UpdateUserDetails", "Account") %>';
<%End If%>
</script>
所以,你甚至可以不必渲染不能由用户因安全原因被调用操作的URL。 (ViewData("readOnly")
表示用户只能读取屏幕访问权限)。
而且有大量的代码在js文件的一部分:
function GetUsersList() {
ajax.getJSON(getUsersUrl, {}, function(data) {
if (data != false) {
ShowUsers(data);
}
else {
jAlert('Error during users list retrieving.');
}
});
}
凡getUsersUrl
在查看
2
你的JavaScript代码定义应该驻留在单独的JavaScript文件。你可以使用全局变量来链接你的视图和JavaScript。例如。查看页面如下所示。
view html ...
<script type="text/javascript">
var pageUrl = @GetURL()
</script>
<script type="text/javascript" src="/js/script.js"/>
script.js
文件中使用pageUrl
变量等全局变量。
2
我不知道这个安全后果的,但另一种方式来做到这一点将使用@ Url.Action设置html标记的'id',然后您可以创建一个JavaScript点击函数,如下所示:
Vi EW
<div class="someClickable" id='@Url.Action("Action", "Controller")'>
</div>
引用的JavaScript文件
$(function() {
$('someClickable').click(function() {
$.ajax({
url: this.id,
success: someJSFunction,
dataType: "html"
});
});
});
您存储在该 'DIV' 的 '身份证' 所需的URL结束。只要您只进行只读操作,这似乎是一个合理的解决方案。
相关问题
- 1. 更好的解决方案?
- 2. 更好的解决方案重复代码,需要优雅
- 3. 如何在javascript中实现决策树。寻找比我丑陋的解决方案更好的解决方案
- 4. TimeZoneInfo | GetUtcOffset:更好的解决方案?
- 5. .htaccess简化/更好的解决方案?
- 6. 阶:更好的解决方案
- 7. Crypt Kicker的更好解决方案?
- 8. 用于粘贴代码的好IM /聊天解决方案
- 9. 用更好的解决方案取代'eval'
- 10. JavaScript的:更好的解决方案不是删除
- 11. 我的编码更快的解决方案,用...代替循环?
- 12. 更好的解决gui的代码?
- 13. 迭代解决方案中的递归解决方案
- 14. JavaScript重复if语句更好的解决方案?
- 15. 解决函数更好的解决方案
- 16. 更好的解决方案,取代foreach循环或改进它
- 17. 哪个解决方案比oracle更好?
- 18. 需要更好解决方案的不切实际的perl代码
- 19. 寻找更好的/优雅的解决方案这个JQuery代码
- 20. 替代的解决方案
- 21. 使用部分类来管理代码,很好的解决方案?
- 22. 在ID列表中找到更好的解决方案?
- 23. 比在模型中访问路线更好的解决方案?
- 24. 使用不同的mvc解决方案相同的代码
- 25. 使用webdriver捕获图像的解决方案。有没有人有更好的解决方案?
- 26. 方法为更好的解决方案 - 中位数
- 27. jQuery删除重复的代码 - 更简单的解决方案?
- 28. 在Rails中消毒视频嵌入代码。什么是好的解决方案?
- 29. 使用PHP和javaScript登录解决方案的密码哈希
- 30. C#VisualStudio 2015如何使用现有解决方案中的代码进入新解决方案
西蒙,我最近回答了这个问题,但实际上发现接受的答案是一个更简洁的解决方案。看看这里为你的问题一个很好的简单的解决方案:http://stackoverflow.com/questions/4624626/do-you-write-your-javascript-in-a-asp-net-mvc-view-or-in -a-separate-javascrip/4625478#4625478欢呼声.. – 2011-01-24 12:16:48