2013-03-12 64 views
1

我在我的.aspx下面的代碼下拉列表 - 確認 - 問題

<td> 
    <script type="text/javascript" language="javascript">\ 
    function ShowConfirm() { 
     if (confirm("Are you sure?") == true) 
     return true; 
     else 
     return false; 
    } 
    </script> 
    <asp:DropDownList ID="ddl1s" runat="server" 
    onselectedindexchanged="ddl1_SelectedIndexChanged" AutoPostBack="True"> 
    </asp:DropDownList> 
</td> 

我已經按照我的aspx.cs代碼

protected void ddlEnrollmentStatus_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    ddl1.Attributes.Add("onchange", "ShowConfirm();"); 
} 

我在下拉列表兩個項目(是和否)

當我從列表中選擇第二個項目時,我的頁面將刷新,並且我將在Page_Load事件中進行設置。

我在做什麼錯?我試圖創建一個confirmmbox,要求用戶驗證他們選擇的值是否是他們想要選擇的值。如果他們按是,將其值更改爲他們選擇的w/e。如果他們按否,則恢復到原始值。

+3

你的代碼傷了我的腦袋。當你在客戶端進行更改時,後面的代碼應該調用JavaScript ShowConfirm? – 2013-03-12 15:48:04

+0

對不起Yuriy :)此外,下面列出的代碼沒有工作。 :(我得到相同的頁面刷新page_load狀態 – 007 2013-03-12 16:48:46

+1

@ user1569220如果你認爲這是因爲你沒有閱讀或嘗試我的答案=)我說的是正確的,並且mellamokb已經證實了它。 – 2013-03-12 17:14:10

回答

1

我不是100%肯定,但我認爲你需要這樣的:

ddl1.Attributes.Add("onchange", "return ShowConfirm();"); 

看看「迴歸」我寫的。

你可以用這個過於簡化您的JavaScript:

function ShowConfirm() { 
    return confirm("Are you sure?") == true; 
} 
+0

爲什麼有人倒下了?我錯了? – 2013-03-12 15:51:36

+1

有些人真的很活潑。你的代碼沒有錯,除非它不是正確的答案。然而,它沒有比你下面其他人沒有更多的錯誤誰沒有投票= /這是一個免費的upvote讓你保持中立;-) – 2013-03-12 16:16:01

+0

謝謝。我真的很喜歡。 – 2013-03-12 19:50:03

1

您可以使用這樣的。

ddl1.Attributes.Add("onchange", "return ShowConfirm();"); 

在頁面加載事件中使用它。

或將其與您的html(.aspx)頁面綁定。

<asp:DropDownList ID="ddl1s" runat="server" onchange="return ShowConfirm();" 
onselectedindexchanged="ddl1_SelectedIndexChanged" AutoPostBack="True"> 
3

如果你有完全客戶端驗證,這是最簡單的做到這一點只有在如果在所有可能的客戶端代碼:

<asp:DropDownList ID="ddl1s" runat="server" 
    onselectedindexchanged="ddl1_SelectedIndexChanged" 
    AutoPostBack="True" onchange="return ShowConfirm();"> 
</asp:DropDownList> 

的服務器和客戶機事件的混合變得非常凌亂因爲所有服務器處理都是先發生,然後將頁面發送到用戶的瀏覽器,然後運行所有客戶端事件(並且每次往返於服務器之間的所有客戶端上下文都會丟失)。您當前的代碼是說:

  1. 用戶更改DropDown值。
  2. 往返服務器。
  3. 服務器通過onchange發送JavaScript代碼。
  4. 沒有任何反應。當用戶實際更改值(1)時,onchange不存在,並且現在不會觸發,因爲頁面在不知道更改的情況下是新鮮加載的。
+0

我仍然遇到同樣的問題(頁面刷新到page_load狀態。我應該在aspx.cs文件中爲ddl1_SelectedIndexChanged事件做些什麼? – 007 2013-03-12 17:09:19

+0

@ user1569220:如果您使用SelectedIndexChanged事件的唯一原因是用於上面的驗證,然後將其完全刪除並將AutoPostBack設置爲false,這裏不需要服務器往返 – mellamokb 2013-03-12 17:11:14

+0

VS中的「Microsoft JScript運行時錯誤:對象預期」錯誤出現了,我從aspx/aspx.cs中刪除了SelectedIndexChanged – 007 2013-03-12 17:22:15

1

AutoPostBack="True"是錯誤的代碼行。這會導致控件發回。但是,它不追蹤新值,而是在追溯時追蹤舊值。

你只需要讓你的事件正確地解僱。首先將此屬性設置爲False;然後確定您的頁面上負責執行回發的內容。