在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。 您可以在以下位置了解更多信息:

以上所有链接还建议声明公共类来覆盖行为:

 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中。

顺便说一句:我无法复制和粘贴,所以这段代码可能包含一些拼写错误,但我相信这是正确的。 至少它指明了你可以解决这个问题的方式。