gpt4 book ai didi

asp.net-mvc - MVC4 Razor对牙套感到困惑

转载 作者:行者123 更新时间:2023-12-04 03:30:05 24 4
gpt4 key购买 nike

对于所有 Razor 专家,我有一个非常简单的问题。我正在尝试使用Url.Content()将jQuery $ .ajax()调用到URL,以将相对于本地的路径转换成相对于根的路径。这样,Razor对我的@section的末尾位置感到有些困惑。我希望能够内联指定URL,但是当我这样做时,Razor认为$ .ajax()参数列表的末尾是我@section的末尾。我使用@section是因为我想使用布局将javascript放在每个文件的底部。为什么 Razor 会变得如此困惑?我什至尝试使用@(Url.Content(...)),但这也不起作用。

另外,这是解决问题的最佳方法吗?我正在使用ASP.NET MVC 4 Preview。

可以使用:

@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")',
dataType: 'html',
success: function (result) {
$('tbody').html(result);
}
}); //Razor thinks this is the curly-brace that ends the section!
});
</script>
}

最佳答案

这很可能取决于解析器的行为。当解析器遇到@符号时,解析器将切换到代码模式,并读取隐式表达式Url.Content("~/Logging.GetMessages")(好吧,实际上它将读取直到'符号,确定它在表达式中不是有效字符,并回溯直到在此阶段之后,解析器与您的 View 有点混淆,因为当遇到最终的)字符并认为这是代码跨度的结尾时,解析器很可能处于代码模式。

现实情况是,在带有C#的 Razor View 中使用javascript时必须非常小心。到代码的转换是明确的,例如}@之后,但是要确定向标记的过渡要困难一些。

除了 Razor ,我的建议是将您的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);

关于asp.net-mvc - MVC4 Razor对牙套感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9366169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com