Url.jtent for javascript

cs0*_*815 7 javascript asp.net-mvc asp.net-mvc-3

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

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

单独的js文件:

$.ajax({
    url: _getUrl,
Run Code Online (Sandbox Code Playgroud)

你认为有更好的方法吗?

Dar*_*rov 6

我个人更喜欢使用HTML5 data-*属性或将URL作为我不引人注意的AJAXify的DOM元素的一部分.

问题是你从来没有写过这样的$.ajax电话.您编写它们以对应于某些DOM事件.例如点击锚点.在这种情况下,它是微不足道的,您只需使用HTML帮助程序来生成此锚点:

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

然后:

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

    });
    return false;
});
Run Code Online (Sandbox Code Playgroud)

或者你是AJAX化表格:

@using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post, new { id = "myForm" }))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后:

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

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

以下是您的下拉列表的外观:

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

然后:

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

因此,您可以看到您并不真正需要_getUrl在视图中声明的此全局javascript变量.

  • 为什么没必要?这样即使禁用了javascript,您的应用程序仍然可以正常运行.这称为渐进增强. (3认同)