c# – 将代码中的值从aspx传递给事件处理程序

c# – 将代码中的值从aspx传递给事件处理程序,第1张

概述我在msdn论坛上问了这个问题,除了一个人提出实际上是一个解决方法之外,每个人都很难过. 在我的Webforms项目中,我有一些aspx代码,如下所示: <%for (int i = 0; i < 10; i++) %><%{ %> <asp:Button runat="server" Text="Click Here" OnClick="MyButtonHandler" /><%} 我在msdn论坛上问了这个问题,除了一个人提出实际上是一个解决方法之外,每个人都很难过.

在我的Webforms项目中,我有一些aspx代码,如下所示:

<%for (int i = 0; i < 10; i++) %><%{ %>    <asp:button runat="server" Text="Click Here" OnClick="MybuttonHandler" /><%} %>

代码成功呈现10个按钮,说“点击这里”

我想要做的是,创建一个事件处理程序,用于单击将i作为参数的按钮.

protected voID MybuttonHandler(object sender,EventArgs e)    {        //do something with i    }

关于我在msdn第一次提出这个问题的时候我正在研究的项目,我最终做了一些完全不同的事情,但是,如果有办法做我想做的事情,我非常想知道如何.

解决方法 正如这个线程所证明的那样,将变量(如i)的值直接从标记放入服务器控件并不是一件容易的事.正如Joe正确指出的那样,代码渲染块(<%= i%>)在服务器控件中不起作用. <%= i%>语法在HTML标记中效果很好,但服务器控件(如按钮)不支持它.

我建议使用转发器将控制流程从标记转移到代码隐藏.这将允许您从后面的代码设置命令参数.这与asp.net的工作方式更为一致.所以……

<%for (int i = 0; i < 10; i++) %>    <%{ %>      <asp:button runat="server" Text="Click Here" OnClick="MybuttonHandler" />    <%} %>

会变得更像

<asp:Repeater ID="buttonRepeater" runat="server"         onitemdatabound="buttonRepeater_ItemDataBound">        <ItemTemplate>            <asp:button ID="Mybutton" runat="server" Text="Click Here" OnClick="MybuttonHandler" />        </ItemTemplate>    </asp:Repeater>

您当然可以在ItemTemplate标记中添加所需的所有HTML.然后在后面的代码中添加以下内容.

protected voID Page_Load(object sender,EventArgs e)    {        this.buttonRepeater.DataSource = new[] { 1,2,3,4,5 }; // however many items you want        this.buttonRepeater.DataBind();    }    protected voID MybuttonHandler(Object sender,EventArgs e)    {        button b = sender as button;        if (b != null)        {            string cmdname = b.Commandname;            // logic based on cmdname        }    }    protected voID buttonRepeater_ItemDataBound(object sender,RepeaterItemEventArgs e)    {        var button = e.Item.FindControl("Mybutton") as button;        if (button != null)        {            var buttonNumber = e.Item.DataItem.ToString();            button.Commandname = buttonNumber;            button.ID = string.Format("Mybutton_{0}",buttonNumber); // required to prevent event valIDation error        }    }

我实际上通过在cmdname变量上的事件处理程序中放置一个断点来测试它.它是根据我点击的按钮正确设置的.

这是一种范式转换,但这是一个符合ASP.NET意图的转变.

总结

以上是内存溢出为你收集整理的c# – 将代码中的值从aspx传递给事件处理程序全部内容,希望文章能够帮你解决c# – 将代码中的值从aspx传递给事件处理程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1234291.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存