2013-04-07 58 views
1

我有一個與IPostBackEventHandler一起使用的服務器控件。如何在ASP.NET中發送dropdownlist selectedvalue作爲回發參數

而在該控件中,我有一個DropDownList。

而這個DropDownList應該用它的參數來引發回發事件。

DropDownList _ddl = new DropDownList(); 
_ddl.Attributes.Add(HtmlTextWriterAttribute.Onchange.ToString() 
    , this.Page.ClientScript.GetPostBackEventReference(this, "this.value")); 

我想要做的是在回發中獲取DropDownList的選定值。

public void RaisePostBackEvent(string eventArgument) 
{ 
} 

當我從RaisePostBackEvents收到時,我只會得到「this.value」。不是DropDownList中的選定值。

我該如何解決這個問題?

回答

1

要實現您的目標,請指定ID_ddl並將其作爲參數傳遞給GetPostBackEventReference

DropDownList _ddl = new DropDownList(); 
_ddl.ID = "MyDropDownList"; 
_ddl.Attributes.Add(HtmlTextWriterAttribute.Onchange.ToString() 
    , this.Page.ClientScript.GetPostBackEventReference(this, _ddl.ID)); 

然後在RaisePostBackEvent,你需要找到其ID你控制eventArgument並以這種方式獲得SelectedValue提供。

public void RaisePostBackEvent(string eventArgument) 
{ 
    DropDownList _ddl = FindControl(eventArgument) as DropDownList; 
    if (_ddl == null) return; 

    string selectedValue = _ddl.SelectedValue; 
    // do whatever you need with value 
} 

爲什麼不能使用JavaScript this.value?還有就是對JavaScript不支持來電,如果你看一下生成的HTML,您將看到:

__doPostBack('ctl02','MyDropDownList'); 

__doPostBack功能如下:

function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 

正如你可以看到recipient參數等於ctl02哪些是用戶控件的UniqueID。當你通過this調用GetPostBackEventReference時,它到達了那裏。 eventArgument將值分配給__EVENTARGUMENT隱藏字段,然後用表單提交。這是GetPostBackEventReference調用的第二個參數。

因此GetPostBackEventReference的第二個paratemer總是按內部類System.Web.UI.Util.QuoteJScriptString方法編碼爲字符串。

+0

thx爲答案,亞歷山大 – 2013-04-15 00:10:03

相關問題