7

我目前使用这种方法来获取正确的相对 URI(与部署情况无关)。剃刀代码(asp.net mvc 3):

@section JavaScript
{  
    <script type="text/javascript">
        var _getUrl =  "@Url.Content("~/bla/di/bla")";
    </script>
}

单独的js文件:

$.ajax({
    url: _getUrl,

你认为有更好的方法吗?

4

2 回答 2

6

就我个人而言,我更喜欢使用 HTML5 data-* 属性或将 URL 作为我不显眼的 AJAXify 的某些 DOM 元素的一部分。

问题是你永远不会写$.ajax这样飞来飞去的电话。您编写它们以对应于一些 DOM 事件。例如点击锚点。在这种情况下,这很简单,您只需使用 HTML 帮助程序来生成此锚点:

@Html.ActionLink("click me", "someAction", "somecontroller", new { id = "123" }, new { @class = "link" })

进而:

$('.link').click(function() {
    $.ajax({
        url: this.href,
        type: 'GET',
        success: function(result) {
            ...
        }

    });
    return false;
});

或者您可能正在对表单进行 AJAX 化:

@using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post, new { id = "myForm" }))
{
    ...
}

进而:

$('#myForm').submit(function() {
    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        success: function(result) {
            ...
        }
    });
    return false;
});

另一个示例是在相应的 DOM 元素上没有适当的 url 时使用 HTML5 data-* 属性。假设您想在下拉列表的选择发生变化时使用 AJAX 调用控制器操作。例如级联ddls。

以下是您的下拉菜单的外观:

@Html.DropDownListFor(x => x.SelectedValue, Model.Values, new { id = "myDdl", data_url = Url.Action("SomeAction") })

进而:

$('#myDdl').change(function() {
    var url = $(this).data('url');
    var selectedValue =  $(this).val();
    $.getJSON(url, { id: selectedValue }, function(result) {
        ...
    });
});

如您所见,您实际上并不需要_getUrl您在视图中声明的这个全局 javascript 变量。

于 2013-04-05T13:44:36.480 回答
0

我会做以下事情:

Javascript 之前的Razor C# 脚本

@{
    var myUrlString = Url.Action("ActionName", new { controller="ControllerName" });
}

JavaScript

$.ajax('@myUrlString',{
    // options
});

您也可以使用Url.RouteUrlUrl.HttpRouteUrl

编辑 - 显示带有分离的 JS 文件的示例

剃刀

@{
    var myServerGeneratedValue = Url.Action("ActionName", new{controller="ControllerName"});
}
<script type="text/javascript">
    var myHelperObject = new MyHelperObject();
    myHelperObject.Init('@myServerGeneratedValue');
</script>

JS文件

var MyHelperObject = function(){

    this.Init = function(serverGeneratedValue){
        // do something with serverGeneratedValue
    };

};
于 2013-04-05T13:42:38.423 回答