加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在onclientclick中将变量传递给javascript

发布时间:2020-12-16 00:05:31 所属栏目:百科 来源:网络整理
导读:好吧,我想我已经从stackoverflow尝试了3-4种方法,但似乎没有一种方法可行. 我有: OnClientClick='%# Eval("albumName","doConfirm("delete","{0}");").ToString() %' 但在html中它呈现为: onclick="doConfirm(quot;deletequot;,quot;Testquot;);" 还尝
好吧,我想我已经从stackoverflow尝试了3-4种方法,但似乎没有一种方法可行.

我有:

OnClientClick='<%# Eval("albumName","doConfirm("delete","{0}");").ToString() %>'

但在html中它呈现为:

onclick="doConfirm(&quot;delete&quot;,&quot;Test&quot;);"

还尝试了一个方法来调用:

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/
> http://forums.asp.net/p/1554455/3818604.aspx
> Stop the tag builder escaping single quotes ASP.NET MVC 2

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

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(&#39;delete&#39;,&#39;myalbum&#39;);" 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">&nbsp;</th>
            <th scope="col">Album Name</th>
            <th scope="col">&nbsp;</th>
            <th scope="col">albumName</th>
        </tr>
        <tr>
            <td>
                <input type="submit" onclick="doConfirm(&quot;delete&quot;,&quot;Zen Arcade&quot;);" 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(&#39;delete&#39;,&#39;Zen Arcade&#39;);" 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(&quot;delete&quot;,&quot;New Day Rising&quot;);" 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(&#39;delete&#39;,&#39;New Day Rising&#39;);" 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(&quot;delete&quot;,&quot;Candy Apple Grey&quot;);" 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(&#39;delete&#39;,&#39;Candy Apple Grey&#39;);" 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;和&#39;实际上并没有影响任何事情.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读