[英]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.