c# – 在onclientclick中将变量传递给javascript
好吧,我想我已经从stackoverflow尝试了3-4种方法,但似乎没有一种方法可行.
我有: OnClientClick='<%# Eval("albumName","doConfirm("delete","{0}");").ToString() %>' 但在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='<%# CreateConfirmation("delete",(string)Eval(albumName)) %>' 但是给我完全相同的问题…. 解决方法
我提前为这么长的答案道歉,但我想要彻底.
这显然是.Net 4.0(及更高版本)中的“安全”功能.您可以在以下位置了解更多信息: > http://avinashsing.sunkur.com/2010/10/29/asp-net-html-encoding-attributes-in-server-controls/ 以上所有链接还建议声明公共类来覆盖行为: public class HtmlAttributeNoEncoding : System.Web.Util.HttpEncoder { protected override void HtmlAttributeEncode(string value,System.IO.TextWriter output) { output.Write(value); } } 然后将其添加到< system.web> web.config中的元素: <httpRuntime encoderType="HtmlAttributeNoEncoding"/> 这肯定解决了渲染问题,因此引号和撇号呈现为“和”(如预期的那样). 那就是说,我用以下方法测试了你的问题: <script type="text/javascript"> var doConfirm = function (action,item) { alert('Sikker p? du vil ' + action + ': ' + item); return false; }; </script> <p>Some "arbitrary" text. <asp:Button ID="Button3" runat="server" Text="Button" OnClientClick="doConfirm('delete','myalbum');" /></p> <asp:GridView ID="GridView1" runat="server"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick='<%# Eval("albumName","{0}");").ToString() %>' /> </ItemTemplate> </asp:TemplateField> <asp:BoundField HeaderText="Album Name" DataField="albumName" /> <asp:TemplateField> <ItemTemplate> <asp:Button ID="Button2" runat="server" Text="Button" OnClientClick='<%# CreateConfirmation("delete",(string)Eval("albumName")) %>' /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> 并在代码隐藏中: public partial class _Default : System.Web.UI.Page { public string CreateConfirmation(String action,String item) { return String.Format(@"return doConfirm('{0}','{1}');",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(); } } 我能够复制你的渲染问题: <p>Some "arbitrary" text. <input type="submit" onclick="doConfirm('delete','myalbum');" value="Button" name="ctl00$MainContent$Button3" id="MainContent_Button3" /> </p> <div> <table cellspacing="0" rules="all" border="1" id="MainContent_GridView1" style="border-collapse:collapse;"> <tr> <th scope="col"> </th> <th scope="col">Album Name</th> <th scope="col"> </th> <th scope="col">albumName</th> </tr> <tr> <td> <input type="submit" onclick="doConfirm("delete","Zen Arcade");" value="Button" name="ctl00$MainContent$GridView1$ctl02$Button1" id="MainContent_GridView1_Button1_0" /> </td> <td>Zen Arcade</td> <td> <input type="submit" onclick="return doConfirm('delete','Zen Arcade');" value="Button" name="ctl00$MainContent$GridView1$ctl02$Button2" id="MainContent_GridView1_Button2_0" /> </td> <td>Zen Arcade</td> </tr> <tr> <td> <input type="submit" onclick="doConfirm("delete","New Day Rising");" value="Button" name="ctl00$MainContent$GridView1$ctl03$Button1" id="MainContent_GridView1_Button1_1" /> </td> <td>New Day Rising</td> <td> <input type="submit" onclick="return doConfirm('delete','New Day Rising');" value="Button" name="ctl00$MainContent$GridView1$ctl03$Button2" id="MainContent_GridView1_Button2_1" /> </td> <td>New Day Rising</td> </tr> <tr> <td> <input type="submit" onclick="doConfirm("delete","Candy Apple Grey");" value="Button" name="ctl00$MainContent$GridView1$ctl04$Button1" id="MainContent_GridView1_Button1_2" /> </td> <td>Candy Apple Grey</td> <td> <input type="submit" onclick="return doConfirm('delete','Candy Apple Grey');" value="Button" name="ctl00$MainContent$GridView1$ctl04$Button2" id="MainContent_GridView1_Button2_2" /> </td> <td>Candy Apple Grey</td> </tr> </table> </div> 单击任何按钮时,JavaScript函数会忽略HTML编码,提醒我: Sikker p? du vil delete: Zen Arcade 因此,虽然它在源代码中看起来很时髦,但引号和撇号呈现为& quot;和'实际上并没有影响任何事情. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |