2013-04-07 2 views
1

У меня есть серверный элемент управления, который работает с IPostBackEventHandler.как отправить dropdownlist selectedvalue как аргумент обратной передачи в ASP.NET

И внутри этого контроля у меня есть DropDownList.

И этот DropDownList должен поднять событие postback с его аргументом.

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 всегда кодируется как строка внутренним классом System.Web.UI.Util.QuoteJScriptString.

+0

THX для ответа, Александр –

Смежные вопросы