【问题标题】:Quotes in my markup replaced with html entities?我的标记中的引号替换为 html 实体?
【发布时间】:2015-05-18 12:45:42
【问题描述】:

我有一个带有文本框和按钮的内容页面(使用母版页)。我希望按钮在执行任何其他操作之前调用一些 javascript。现在我只是在测试 javascript,所以这是一个草稿。

问题是我的标记被改变了,所以客户看不到所有的引号。引号正在转换为 HTML 实体字符串。

所以这段代码中的按钮:

<asp:Content ID="Content1" ContentPlaceHolderID="cphMainContent" runat="server">
    <div>
        <asp:TextBox ID="txtInputTopics" 
            runat="server" TextMode="MultiLine" 
            Width="335px" Height="250px" 
            CssClass="mediumFontTextbox"/>
        <asp:Button ID="btnTestAdd" 
            runat="server" Text="Add"
            OnClientClick='CheckFirstAlphaNum(document.getElementById("<%= txtInputTopics.ClientID %>").val);'  />
    </div>
</asp:Content>

Get 变成了这样:

<input type="submit" name="ctl00$ctl00$cphBody$cphMainContent$btnTestAdd"
   value="Add"
   onclick="CheckFirstAlphaNum(document.getElementById(&quot;&lt;%= txtInputTopics.ClientID %>&quot;).val);" 
   id="cphBody_cphMainContent_btnTestAdd" />

为什么?

【问题讨论】:

  • 更改引号不是问题。问题在于无法将 &lt;%= 解析为 ASP。

标签: javascript html asp.net


【解决方案1】:

那是因为它们应该是 HTML 编码的。要在由引号分隔的属性值中包含引号,它必须是 HTML 编码的。客户会看到引号就好了。

您的问题是您试图在具有runat="server" 的控件的属性内使用服务器代码标记 (&lt;%= txtInputTopics.ClientID %&gt;)。代码最终在 HTML 属性中结束,而不是将客户端 ID 值放入属性中。

您需要另一种将值放入属性的方法,例如使用数据绑定表达式。例如:https://stackoverflow.com/a/1393407/69083

【讨论】:

  • 我一定是在其他地方出错了。当我看到 HTML 标签而不是引号时,我感到很紧张。我可以使用以下方法正确设置 onclick:btnTestAdd.OnClientClick = "CheckFirstAlphaNum($(" + txtInputTopics.ClientID + ").val(), 'Topic Name')";。我的代码正在运行。谢谢。
【解决方案2】:

正如 Guffa 所说,您需要另一种方法来获取输入节点,您可以尝试获取按钮的上一个兄弟

//source: http://www.w3schools.com/dom/prop_element_previoussibling.asp
function get_previoussibling(n) {
  x=n.previousSibling;
  while (x.nodeType!=1) {
    x=x.previousSibling;
  }
  return x;
}

function CheckFirstAlphaNum(element) {
  var inputEl = get_previoussibling(element);
  var value = inputEl.value;
  // do your stuff
}

html

<asp:Content ID="Content1" ContentPlaceHolderID="cphMainContent" runat="server">
  <div>
    <asp:TextBox ID="txtInputTopics" 
      runat="server" TextMode="MultiLine" 
      Width="335px" Height="250px" 
      CssClass="mediumFontTextbox"/>
    <asp:Button ID="btnTestAdd" 
      runat="server" Text="Add"
      OnClientClick="CheckFirstAlphaNum(this);" />
  </div>
</asp:Content>

【讨论】:

    猜你喜欢
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多