繁体   English   中英

在javascript代码中使用Url.Action的更好解决方案

[英]Better solution to using Url.Action in javascript code

在我当前使用asp.net MVC 3(使用razor)的项目中,当我进行Ajax调用时,我必须将JS保留在视图页面上,因为我想使用Url.Action来生成URL。 这意味着我无法将js代码拆分为.JS文件,是否有比我目前正在做的更好的解决方案。

我倾向于以与上面类似的方式实现这一点,因为我喜欢命名我的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>

您只能在视图中定义网址,并将所有其他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在View中定义

我不确定这方面的安全后果,但另一种方法是使用@ Url.Action设置html标记的'id',然后你可以创建一个javascript点击功能,如下所示:

视图

<div class="someClickable" id='@Url.Action("Action", "Controller")'>
</div>

引用的javascript文件

$(function() {
    $('someClickable').click(function () {
        $.ajax({
            url: this.id,
            success: someJSFunction,
            dataType: "html"
        });
    });
});

您最终将所需的网址存储在“div”的“id”中。 只要您执行只读操作,这似乎是一个合理的解决方案。

你的javascript代码应该驻留在单独的javascript文件中。 您可以使用全局变量来链接您的视图和JavaScript。 例如,查看页面如下所示。

view html ...
<script type="text/javascript">
var pageUrl = @GetURL()
</script>

<script type="text/javascript" src="/js/script.js"/>

script.js文件使用pageUrl变量和其他全局变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM