在onclientclick中将变量传递给javascript
好吧,我想我已经从stackoverflow尝试了3-4种方法,但似乎没有一种方法可行。
我有:
OnClientClick=''
但在html中它呈现为:
onclick="doConfirm("delete", "Test");"
还尝试了一个方法来调用:
public string CreateConfirmation(String action, String item) { return String.Format(@"return confirm('Sikker på du vil {0}: {1}');", action, item); }
有了这个:
OnClientClick=''
但是给了我完全相同的问题….所以我很丢失?
我提前为这么长的答案道歉,但我想要彻底。
这显然是.Net 4.0(及更高版本)中的“安全”function。 您可以在以下位置了解更多信息:
- http://avinashsing.sunkur.com/2010/10/29/asp-net-html-encoding-attributes-in-server-controls/
- http://forums.asp.net/p/1554455/3818604.aspx
- 停止标记生成器转义单引号ASP.NET MVC 2
以上所有链接还建议声明公共类来覆盖行为:
public class HtmlAttributeNoEncoding : System.Web.Util.HttpEncoder { protected override void HtmlAttributeEncode(string value, System.IO.TextWriter output) { output.Write(value); } }
然后将其添加到web.config中的
元素:
这肯定解决了渲染问题,因此引号和撇号呈现为"
和'
(如预期的那样)。
也就是说,我用以下方法测试了你的问题:
Some "arbitrary" text.
并在代码隐藏中:
public partial class _Default : System.Web.UI.Page { public string CreateConfirmation(String action, String item) { return String.Format(@"return doConfirm('{0}', '{1}');", action, item); } protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); DataColumn dc = new DataColumn("albumName", typeof(string)); DataRow dr = null; dt.Columns.Add(dc); dr = dt.NewRow(); dr["albumName"] = "Zen Arcade"; dt.Rows.Add(dr); dr = dt.NewRow(); dr["albumName"] = "New Day Rising"; dt.Rows.Add(dr); dr = dt.NewRow(); dr["albumName"] = "Candy Apple Grey"; dt.Rows.Add(dr); GridView1.DataSource = dt; GridView1.DataBind(); } }
我能够复制你的渲染问题:
Some "arbitrary" text.
Album Name albumName Zen Arcade Zen Arcade New Day Rising New Day Rising Candy Apple Grey Candy Apple Grey
单击任何按钮时,JavaScript函数会忽略HTML编码,提醒我:
Sikker på du vil delete: Zen Arcade
因此,虽然它在源代码中看起来很时髦,但引号和撇号呈现为"
和'
实际上并没有影响任何事情。
请尝试以下方法:
JS:
function Delete(element) { var value = element.value; return confirm('Delete' + value + '?'); }
只需将事件服务器端附加到rowDataBound
事件中,(可以用Button替换linkbutton)
LinkButton myLinkButton=(LinkButton)e.row.FindControl("yourButtonName"); if(myLinkButton!=null) { myLinkButton.Attributes.Add("onclick","javascript:return confirm ('Are you sure you want to delete "+ DataBinder.Eval(e.row.DataItem, "YourDbField") + " ?');"); }
虽然这个问题是5年之久,但我想跟进,因为我遇到了与ImageButton相同的问题,并且能够使用HiddenField解决它。
背景:我有一个Web用户控件,如果有可用的帮助,我想显示一个帮助按钮。
我在用户控件中添加了一个HiddenField和一个ImageButton。 然后我在控件上创建了一个属性,以便开发人员可以添加帮助文本。
ASPX
代码背后(CS文件)
public string HelpText { get { return hidHelpText.Value; } set { hidHelpText.Value = value; } } protected void Page_Load(object sender, EventArgs e) { imgHelp.Visible = !string.IsNullOrEmpty(HelpText); imgHelp.OnClientClick = string.Format("MsgBox({0}.value, MessageButtons.OK); return false;", hidHelpText.ClientID); }
这解决了问题,因为文本属于隐藏字段,而不是尝试将其包含在OnClientClick属性的JavaScript中。
顺便说一句:我无法复制和粘贴,所以这段代码可能包含一些拼写错误,但我相信这是正确的。 至少它指明了你可以解决这个问题的方式。