使用MVC的Javascript URL会导致索引页面出现问题

时间:2014-04-04 14:16:14

标签: javascript asp.net-mvc-4

基本问题是:

有一个带控件的页面调用ajax调用。

ajax调用的网址为var url = 'someAjaxUrl';

我在页面上

  

mysite.com/bibble/controller/ViewFish

当使用url调用ajax时,它将采用以下方法:

  

mysite.com/bibble/controller/someAjaxUrl

这很棒。但是,如果我决定将我的ViewFish页面作为控制器的索引,则该URL将变为:

mysite.com/bibble/controller

这打破了ajax,因为ajax现在转到

  

mysite.com/bibble/someAjaxUrl

是否有一个简单的解决方案可以确保javascript始终有效?

如果您手动输入

  

mysite.com/bibble/controller/Index

它有效。但这些网址是通过ActionLink()生成的,会自动为您省略/Index

欢迎思考

1 个答案:

答案 0 :(得分:4)

  

欢迎思考

不要硬编码网址:

var url = 'someAjaxUrl';

改为使用内置网址助手:

<script type="text/javascript">
    var url = '@Url.Action("someAction", "someController")';
</script>

或者如果您不引人注意地使用某些DOM元素(如锚点或表单)进行AJAX化,则只需使用其href或action属性即可。

例如:

@Html.ActionLink("click me", "someAction", "someController", null, new { id = "myAnchor" })

然后在你单独的javascript中:

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

        }
    });
    return false;
});

这样您甚至不需要url变量。您已经将它作为DOM的一部分。

这也适用于div或其他元素:

<div id="myDiv" data-url="@Url.Action("someAction", "someController")">
    Click me
</div>

然后:

$('#mydiv').click(function() {
    $.ajax({
        url: $(this).data('url'),
        type: 'GET',
        success: function(result) {

        }
    });
});