Во-первых, класс DropDownList не предоставляет свойство OnChange
, поэтому я предполагаю, что вы делаете что-то вроде:
protected void Page_PreRender(object sender, EventArgs e)
{
ddlWinnerStatus.Attributes.Add("onchange", "return ShowWarning(this);");
}
Теперь проблема заключается в том, что изнутри раскрывающийся список объединяет обратный вызов существующего атрибута onchange
, который дает что-то вроде:
<select onchange="return ShowWarning(this); __doPostBack(...);">
На самом деле все сложнее, потому что AutoPostBack
- это true
, поэтому добавляется дополнительный вызов window.setTimeout()
, но в этом суть, и вы можете видеть, что __doPostBack()
никогда не вызывается, поскольку вы всегда возвращение рано из обработчика.
Чтобы достичь того, что вы хотите, вам придется делать всю работу самостоятельно, используя GetPostBackEventReference () , чтобы сгенерировать соответствующий вызов __doPostBack()
:
protected void Page_PreRender(object sender, EventArgs e)
{
ddlWinnerStatus.Attributes.Add("onchange",
String.Format(CultureInfo.InvariantCulture,
"if (ShowWarning(this)) {{ {0}; return true; }} else return false;",
ClientScript.GetPostBackEventReference(ddlWinnerStatus, "")));
}
Обратите внимание, что если вы это сделаете, свойство AutoPostBack
станет избыточным (и фактически игнорируется).