要實現您的目標,請指定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
方法編碼爲字符串。
thx爲答案,亞歷山大 – 2013-04-15 00:10:03