2010-11-19 56 views
1
  • 我有一個gridview。
  • 在GridView是在更新面板。
  • 我在gridview的模板列中添加了一個下拉列表。
  • 我將autopostback設置爲true。
  • 我有一些代碼在SelectedIndexChanged事件工作

所有這一切的偉大工程更新面板中的gridview dropdownlist觸發客戶端確認框

現在我想在下拉菜單 我把它彈出的的客戶端更改添加一個JavaScript確認提示確認框,但不管是什麼用戶選擇(確定或取消),它不回發

<asp:DropDownList ID="ddlWinnerStatus" runat="server" CssClass="winStatusDDL" OnChange="return ShowWarning(this);"AutoPostBack="true" OnSelectedIndexChanged="ddlWinnerStatus_OnSelectedIndexChanged"></asp:DropDownList> 
+0

你能後的功能ShowWarning()? – 2010-11-19 17:42:36

+0

...和UpdatePanel的標記。你有ChildrenAsTriggers =「真」嗎? – 2010-11-19 18:08:14

+0

...和OnSelectedIndexChanged事件代碼? – jwiscarson 2010-11-19 19:26:15

回答

1

首先,DropDownList類不公開的OnChange財產,所以我猜你正在做的事情,如:

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    ddlWinnerStatus.Attributes.Add("onchange", "return ShowWarning(this);"); 
} 

現在的問題是,引擎蓋,下拉列表下會連接回發調用現有onchange屬性,這就給類似:

<select onchange="return ShowWarning(this); __doPostBack(...);"> 

這實際上是比較複雜的,因爲AutoPostBacktrue所以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屬性變得多餘(並被有效地忽略)。