[英]ASP.NET C# scope issue
好吧,所以我想在ASP.NET和C#中使用一些简单的东西来获得超级超级基础知识,我很难找到如何让这个范围问题起作用。 至少,我认为这是一个范围问题! :)
所以,这是我的Default.aspx演示文稿标记:
<%@ Page Language="C#" Inherits="project1.Tree" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title>project1_test</title>
</head>
<body>
<form runat="server">
<p><asp:label runat="server" id="lblOutput" /></p>
<asp:TextBox ID="txtGrowBy" runat="server" />
<asp:Button id="btnGrow" runat="server" Text="Grow!!!" />
</form>
</body>
</html>
这是我的CodeBehind文件:
using System;
using System.Web;
using System.Web.UI;
namespace project1
{
public partial class Tree : System.Web.UI.Page
{
public int height = 0;
public void Grow(int heightToGrow) {
height += heightToGrow;
}
protected void Page_Load(Object Source, EventArgs E)
{
Tree tree1 = new Tree();
string msg = "Let's plant a tree!<br/>";
msg += "I've created a tree with a height of " +
tree1.height + " metres.<br/>";
lblOutput.Text = msg;
}
public virtual void btnGrowClicked (object sender, EventArgs args)
{
txtGrowBy.Text = tree1.heightToGrow;
}
}
}
现在,我认为问题在于我没有使用吸气剂和发送者,但我不是百分百肯定。
我认为你在回发之间没有保持可变的height
?
这是因为网络是无国籍的。 除非您将值存储在Session,ViewState或Hidden Fields中,否则不会在回发之间维护变量。 因此,您可以执行以下操作来维护PostBack之间的height
值:
ASPX:
<form runat="server">
<asp:HiddenField id="hd_Height" runat="server" />
</form>
代码背后:
public int Height
{
get
{
return int.Parse(hd_Height.Value).ToString();
}
set
{
hd_Height.Value = value.ToString();
}
}
你的代码有几个直接的问题; 在Page_Load方法中,您正在创建一个新的Tree实例 - 您不必这样做,因为在访问ASP.NET页面时,IIS会自动创建一个实例。 在Page_Load方法中使用this
关键字可以访问该实例。
此外,似乎没有任何东西可以称为Grow方法; 这是故意的吗? 你不应该在btnGrowClicked方法中调用它吗?
最后,当GenericTypeTea指出时,你的高度字段将不会在回发之间保持。 最简单的方法是使用会话状态,例如:
private void PersistHeight(int height)
{
this.Session["height"] = height;
}
private int RestoreHeight()
{
return (int)this.Session["height"];
}
您也可以使用viewstate(如果Mono支持它); 在将控制权交还给浏览器之前,只需将更新后的值添加到viewstate即可。 然后从viewstate中读取最后一个回发中保存的原始值并将新值递增到它:
public int MyValue {get {return Convert.ToInt32(viewstate [“myVal”]);} set {viewstate [“myVal”] = value;}}
我希望这是有道理的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.