我有一個相當長的問題,我很害怕。我對ASP.NET很新,所以請耐心等待。 我已經建立了一個ASP.NET頁面的控件,列出了一些選項。每個選項都有兩個可點擊的區域(爲簡單起見,稱它們爲按鈕)。一個選擇選項,另一個隱藏選項。ASP.NET觸發帶多個參數的服務器端事件
protected void Page_Load(object sender, EventArgs e)
{
RenderOptions();
}
public void RenderOptions()
{
for (int i = 0; i < 5; i++) {
HtmlGenericControl div1 = new HtmlGenericControl("div");
div1.Attributes.Add("onclick", ClientScript.GetPostBackEventReference(this, "option" + i));
m_TreeContainer.Controls.Add(div1);
HtmlGenericControl div2 = new HtmlGenericControl("div");
div2.Attributes.Add("onclick", ClientScript.GetPostBackEventReference(this, "option" + i));
m_TreeContainer.Controls.Add(div2);
}
}
public void RaisePostBackEvent(string arg)
{
//do something
}
這工作正常(我實現IPostBackEventHandler接口)。這裏的問題在於,我似乎沒有辦法找到哪個HTML元素被點擊,因此應該在RaisePostBackEvent方法中執行哪個操作。
我試圖做的是創建一個新的類(HtmlDivControl),它看起來是這樣的:
class HtmlDivControl : HtmlGenericControl, IPostBackEventHandler
{
#region Delegates
public delegate void ClickEventHandler(object sender, string eventArgument);
#endregion
#region Properties
private ClickEventHandler m_Click;
public ClickEventHandler Click
{
get { return m_Click; }
set { m_Click = value; }
}
#endregion
#region Constructors
public HtmlDivControl()
{
}
#endregion
public void RaisePostBackEvent(string eventArgument)
{
m_Click.Invoke(this, eventArgument);
}
}
現在我做DIV1和DIV2我HtmlDivControl而非HtmlGenericControl中,單擊屬性設置爲一個方法(委託)並傳遞div(div1或div2)本身作爲GetPostBackEventReference方法的控件。這一次,我不僅可以區分不同的divs,還可以預先確定應該執行的操作。但是,控件的RaisePostBackEvent在PageLoad之後調用。所以我現在所面臨的問題是整個選項控件在處理事件之前就被渲染(因此,應該隱藏的選項並不是因爲實際的隱藏發生在渲染之後)。將RenderOptions()調用移動到PageLoadComplete方法也沒有幫助,因爲div控件將不存在。
我很確定我在這裏錯過了一些非常基本的東西。但是,有人可以解釋我應該如何處理這樣的事情嗎?
p.s. 我該如何在這裏寫下劃線?他們習慣使文本斜體?有一些逃生角色嗎?
你想用這個控件做什麼?我的建議是遠離自定義控件類,如果你是新來的ASP.Net – John 2009-08-06 14:57:59
Page_Load是微軟想出來的東西,而不是我:-)另外,這似乎不是一個很好的理由來打破使用一個非常有效的字符。但這是一個完全不同的討論。 @John:如果我要遠離自定義控件,那麼我將如何學習ASP.NET的更復雜的方面?澄清一下,我並沒有在ASP.NET或編程方面邁出第一步,只是我現在進入了一個我不完全熟悉的領域。根據我發佈的內容,您可能會看到我正朝着一個錯誤的方向前進。如果是這樣,請給我正確的方法。 – Jerry 2009-08-06 15:21:44
我之前提到的原因是,除非您打算在其他項目中重新使用此控件,否則幾乎總是使用內置控件更簡單/更優雅的解決方案,或者至少通過創建UserControl – John 2009-08-06 16:24:46