请试试
window.open("@(Html.Raw(_config["MapLookupURL"]))" + "Seoul");
.
以下是我的测试重用代码:
@using Microsoft.Extensions.Configuration
@inject IConfiguration _config
@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
<button id="btn1">click to search</button>
<div id="cont1">@_config["MapLookupURL"]</div>
@section Scripts{
<script>
$("#btn1").click(function () {
var a = @_config["MapLookupURL"];
var b = "@Html.Raw(_config["MapLookupURL"])";
console.info(a);
window.open("https://www.google.com/maps/search/?api=1&query=" + "Seoul");
})
</script>
}
您将看到,当页面加载时,它已经将js中的asp.net核心vaiable转换为纯html内容。与此同时,Razor会自动对任何字符串输出进行HTML编码,以防止跨站脚本(XSS)攻击。这就是为什么我们可以看到
<div id="cont1">@_config["MapLookupURL"]</div>
显示良好(浏览器可以直接显示编码),但
<script>
它没有。解决方法是使用
@Html.Raw(_config["MapLookupURL"])
其输出未编码的原始字符串。