我正在使用 C# 编写 MVC 应用程序。在这一特定部分中,我有一个条件开关用于导航以突出显示相应的选项卡。这是相关代码:
<script type="text/C#" runat="server">
string oController;
string oAction;
const string current = "class=\"current_page\"";
protected override void OnLoad(EventArgs e)
{
oController = ViewContext.RouteData.Values["controller"].ToString();
oAction = ViewContext.RouteData.Values["action"].ToString();
base.OnLoad(e);
}
</script>
<div id="menu">
<ul>
<li <%= (oController.Equals("Home") ? current : "") %>><a href="/">Home</a></li>
<li><a href="/CustomerManager/">Customer Manager</a></li>
<!-- <%: oController.Equals("Home") %> -->
<!-- <%: oAction %> -->
</ul>
</div>
在这一行 ( <li <%= (oController.Equals("Home") ? current : "") %>><a href="/">Home</a></li>
) 如果我使用 <%: %>
ASP block 而不是 <%= %>
(正如推荐的那样,因为后者很快就会被淘汰),生成的文本显示为
<li class="current_page"><a href="/">Home</a></li>
代替
<li class="current_page"><a href="/">Home</a></li>
发生这种情况的任何建议和/或原因?谢谢!
最佳答案
因为 <%:
旨在对用户输入等数据进行编码。在您的情况下,这是自行生成的(受信任的)html,因此您不想想要对其进行编码; <%=
是正确的用法。
<%:
用于 <%:user.Name%>
之类的东西,这可以方便地防止其中包含 xss 等的恶意文本的问题。
关于c# - 显示生成的文本时 <% : . .. %> 与 <%= %> 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3680496/