asp.net-mvc – MVC4 Razor对大括号感到困惑

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – MVC4 Razor对大括号感到困惑前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个相当简单的问题,所有的剃刀专家在那里.我正在尝试对一个URL进行jQuery $.ajax()调用,使用Url.Content()将家庭相对路径转换为根相对路径.在这样做的时候,Razor对我的@section的结尾位置感到困惑.我希望能够直接指定URL,但是当我这样做时,Razor认为$.ajax()参数列表的结尾是我的@section的结尾.我使用@section,因为我想使用布局将我的 JavaScript放在每个文件底部.为什么剃刀变得如此困惑?我甚至尝试使用@(Url.Content(…)),但这也不起作用.

此外,这是解决问题的最佳方式吗?我正在使用ASP.NET MVC 4预览.

这样做:

@section Scripts {
    <script type="text/javascript">        
        var getMessagesUrl = '@Url.Content("~/Logging/GetMessages")';

        $(document).ready(function () {
            $.ajax({
                url: getMessagesUrl,dataType: 'html',success: function (result) {
                    $('tbody').html(result);
                }
            });
        });
    </script>
}

这不是:

@section Scripts {
    <script type="text/javascript">        
        $(document).ready(function () {
            $.ajax({
                url: '@Url.Content("~/Logging/GetMessages")',success: function (result) {
                    $('tbody').html(result);
                }
            }); //Razor thinks this is the curly-brace that ends the section!
        });
    </script>
}

解决方法

这可能是解析器的行为.当遇到@符号时,解析器将切换到代码模式,并将读取隐式表达式Url.Content(“〜/ Logging.GetMessages”)(实际上它将读取直到’符号,确定它不是有效的字符在一个表达和追溯中返回直到结束).在这个阶段之后,解析器对您的观点有点混淆,因为它可能在遇到最终}字符时处于代码模式,并认为它是代码跨度的结束.

现实是,在使用C#的剃须刀视图中使用JavaScript时,您必须非常小心.对代码的转换是明确的,例如@和之后{,但转换到标记有点难以确定.

除了剃刀之外,我的建议是将您的JavaScript应用程序代码粘贴到外部文件中,并利用data- *属性将元信息传达到您的应用程序代码,例如:

<script id="messageScript" type="text/javascript"
    src="/Scripts/messages.js" 
    data-messages="@Url.Content("~/Logging/GetMessages")"></script>

您可以访问哪些:

(function($) {

    $(function() {
        var $this = $("#messageScript");
        $.ajax({
            url: $this.attr("data-messages"),type: "html",success: function(result) {
                $("tbody").html(result);
            }
        });
    });

})(window.jQuery);
原文链接:/aspnet/246132.html

猜你在找的asp.Net相关文章