c# - 显示生成的文本时 <% : . .. %> 与 <%= %> 的问题

标签 c# asp.net-mvc

我正在使用 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=&quot;current_page&quot;><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/

相关文章:

c# - ASP.MVC 中包含多个分部 View 的复杂 View

C# 使用反射访问窗口属性

c# - 如何创建自定义验证属性?

c# - CRC-5 正确计算?

asp.net - 在 Asp.net MVC 4 项目的 UI 层中不保留任何业务逻辑

c# - 如何从不包括查询字符串参数的url获取当前页面

c# - 通过 Open XML 将数据导出到支持宏的 Excel

python - 厌倦了 ASP.NET,我应该学习以下哪些内容,为什么?

c# - 在引用 C# MVC Controller 中的成员时,由于其保护级别而无法访问对象

c# - 使用 [FromUri] 属性 - 将复杂对象与嵌套数组绑定(bind)