客户端需要MVC路由信息吗?

时间:2011-10-19 21:17:49

标签: javascript asp.net-mvc

我需要在客户端上为我的javascript逻辑提供路由信息。我现在有一个可行的解决方案,但感觉有点笨重。我正在页面上注入隐藏字段。我想有必要有更好的方法。这就是我目前正在做的事情:

<input type="hidden" id="rt" value="@string.Format("{0}://{1}{2}",Request.Url.Scheme,Request.Url.Authority,Url.Content("~"))"/>

1 个答案:

答案 0 :(得分:1)

是的,非常笨重。实际上你的javascript不需要绝对的网址。它可以与相对网址一起使用。例如:

@Html.Hidden("rt", Url.Content("~/"))

现在,使用隐藏字段是否是一件好事虽然说不知道有关您的场景的更多细节以及您在javascript中想要做什么。但让我们考虑一个非常常见的情况。您想要AJAXify表单。在这种情况下,您将在视图中使用HTML帮助程序生成表单,然后:

$(function() {
    $('#myform').submit(function() {
        $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            success: function(result) {
                // TODO: do something with the results
            }
        });
        return false;
    });
});

了解我们如何在javascript之前不再需要任何硬编码的网址或隐藏字段。

或者让我们考虑另一种情况。你想要AJAXify锚。一样。您使用Html.ActionLink生成锚点,然后:

$(function() {
    $('#mylink').click(function() {
        $.get(this.href, function(result) {
            // TODO: do something with the results
        });
        return false;
    });
});

或者另一种情况。您有一些div容器,您希望在单击它时向某些控制器操作发送AJAX请求。在这种情况下,您可以在div上使用HTML5 data- *属性:

<div id="mydiv" data-url="@Url.Action("Foo", "Home")">Some contents</div>

然后:

$(function() {
    $('#mydiv').click(function() {
        $.get($(this).data('url'), function(result) {
            // TODO: do something with the results
        });
        return false;
    });
});

好的,现在你看到你不再需要任何隐藏的字段了。总有可能做得更好。