WebForms按钮能否通过ASPX标记访问后台代码类的属性?
WebForms按钮能否通过ASPX标记访问后台代码类的属性?
当然可以!在ASP.NET WebForms中,只要后台代码类里的属性(或字段)是**公共(public)或者受保护(protected)**的,ASPX标记就能直接访问到它——甚至你可以用内联表达式直接把属性值输出到页面上,就像你代码里尝试的那样。
先帮你梳理下代码里的关键点,顺便修正几个小问题:
修正后的ASPX标记代码
<tr> <td> <asp:Label ID="monstersPrimaryWeaponDamageTotalLabel" Text="Primary Weapon Damage: " runat="server" /> </td> <td> <asp:Button ID="PrimaryWeaponDamageButton" Text="Update Primary Weapon Damage" ValidationGroup="MakeMonster" runat="server" OnClick="PrimaryWeaponDamageButton_Click" /> </td> <td><%= MonstersPrimaryWeaponDamageTotalString %></td> </tr>
这里注意两个细节:
- 原代码里的Button标签没有闭合,我补上了
/>; - 按钮的
OnClick事件应该绑定到一个事件处理方法,而不是属性名——原代码里绑定的MonstersPrimaryWeaponDamageTotalString是属性,这会导致运行报错,我改成了对应的方法名PrimaryWeaponDamageButton_Click。
对应的后台C#代码
public partial class MonsterCreationPage : System.Web.UI.Page { // 定义受保护/公共属性,供ASPX页面访问 protected string MonstersPrimaryWeaponDamageTotalString { get; set; } protected void Page_Load(object sender, EventArgs e) { // 首次加载时初始化属性值 if (!IsPostBack) { MonstersPrimaryWeaponDamageTotalString = "0"; } } // 按钮点击的事件处理方法 protected void PrimaryWeaponDamageButton_Click(object sender, EventArgs e) { // 这里可以根据业务逻辑计算并更新属性值 MonstersPrimaryWeaponDamageTotalString = "15-25"; } }
核心要点说明
- 访问权限要求:后台的属性必须是
public或protected的——因为ASPX页面本质上是后台代码类的子类,所以受保护成员也能被访问。如果是private,ASPX标记就看不到这个属性了。 - 内联表达式
<%= %>:这个语法会在页面渲染时直接输出属性的当前值,不需要额外调用数据绑定方法。如果用<%# %>(数据绑定表达式),则需要在后台调用DataBind()才能生效。 - 回发时的值保留:WebForms是无状态的,默认情况下回发后属性会重新初始化。如果需要在回发后保留属性值,可以把值存在
ViewState里,比如修改属性的实现:protected string MonstersPrimaryWeaponDamageTotalString { get { return ViewState["PrimaryWeaponDamage"]?.ToString() ?? "0"; } set { ViewState["PrimaryWeaponDamage"] = value; } }
这样当你点击按钮触发回发后,更新后的属性值就会被保留并显示在页面上了。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

