【问题标题】:ASP.NET quote character encoding causes problems when setting a control's property设置控件属性时,ASP.NET 引号字符编码会导致问题
【发布时间】:2010-12-10 17:09:26
【问题描述】:

我有一个 ASP.NET Web 应用程序,在某个时候我会这样做:

mycontrol.stringparameterforjscript = "document.getElementById('" + myotherparam + "').value = 'Hello'";

问题是这个东西不起作用。 如您所见,这在某些标记的某些事件中设置了 javascript。好吧,当页面被重新设计时,问题是我的参数看起来像这样:

<textarea onfocus="document.getElementById(&#39;myvalue&#39;).value = &#39;Hello&#39;"></textarea>

我必须准确地说,我要设置的这个文本框位于 ListView 的 InsertItemTemplate 内,并且初始化并不容易。出于这个原因,我插入了您在文本框的加载事件处理程序中看到的初始化代码。我可以告诉你一件事:如果这段代码引用了页面中任意位置的文本框,并且我从页面的加载事件处理程序中调用了这段代码,那么这将运行良好。但我不知道在这种特殊情况下该怎么做。

我也在考虑是否可以创建一个 webcntrol 来处理这样的问题。我真的不知道在这种情况下最佳做法是什么。

【问题讨论】:

  • 嗯,它显然是 HTML 编码的。什么是“stringparameterforjscript”,HTML 是如何呈现的?
  • 如何设置textareaonfocus 属性?我猜编码是通过textarea 控件进行的,而不是您的mycontrol.stringparameterforjscript...
  • @bdukes 我不这么认为,我通过一个 ASP.NET 控件库属性,我想问题就在那里。必须有一个转义序列设置在某个地方,只是我不知道它...... :(

标签: c# asp.net character-encoding rendering


【解决方案1】:

我认为您可能需要在分配中的两个字符串文字上使用 @,并删除斜杠:

mycontrol.stringparameterforjscript = @"document.getElementById('" + myotherparam + @"').value = 'Hello'";

编辑

我是怎么做到的:

在 .aspx 上:

<asp:Textbox ID="tbTest" runat="server" TextMode="MultiLine" />

在代码中:

protected void Page_Load(object sender, EventArgs e)
{
    string myotherparam = "paramval";
    tbTest.Attributes.Add("onfocus", @"document.getElementById('" + myotherparam + @"').value = 'Hello'");
}

结果输出:

<textarea name="tbTest" rows="2" cols="20" id="tbTest" onfocus="document.getElementById('paramval').value = 'Hello'"></textarea>

【讨论】:

  • 它不起作用,它还在最终输出中打印\...但是这个问题真的这么严重吗??????我简直不敢相信!
  • 对不起,斜线也应该从字符串中删除。请参阅我编辑的答案。我刚刚自己测试过,它似乎可以工作。
  • 不,它不起作用,总是 html 编码...如果它对你有用,可能是页面编码问题。你能告诉你在@page指令或Web.config文件中为你的网站设置了什么页面编码???? UTF-8?还是别的什么?
  • 奇怪...我没有明确设置任何编码,它应该默认工作。有关我所做的详细信息,请参阅我的更新答案。
  • 这很奇怪。我尝试将代码移动到文本框 onload 事件处理程序中,它仍然对我有用。我发现了这个 SO question,它不同但相关:stackoverflow.com/questions/1361914/…。接受的答案建议覆盖控件的呈现事件。这似乎有点矫枉过正,但如果没有其他工作......
【解决方案2】:

好的,我终于成功了。 HTML Encoded strings recognized by the javascript engine, how's it possible? 正如您将看到的那样,发生的事情没有什么可担心的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-30
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 2021-06-08
    • 1970-01-01
    相关资源
    最近更新 更多