2013-06-24 56 views
1

我有一個叫做contact.aspx的表格,它有一個包含用戶列表的下拉列表。如何更改aspx中的其他頁面的下拉菜單?

我在下面添加行添加用戶。

<a href="#" id="userLink" onclick="insertUser()" class="addnew" runat="server">New User</a> 

和insertUser的JavaScript是如下:

<script type="text/javascript"> 
    function insertUser() { 
     var win = window.open('stackoverflow.aspx?t=1', 'User Insert', 'width=800,height=600'); 
} 
</script> 

,當我點擊「New User」,stackoverflow.aspx打開,我要進入新的用戶數據並點擊保存。 單擊save buton後,如何關閉stackoverflow.aspx和只需在contact.aspx處刷新下拉框

回答

0

您可以使用下面的JavaScript代碼來關閉子窗口,並刷新父(ref):

window.close(); 
if (window.opener && !window.opener.closed) { 
window.opener.location.reload(); 
} 

,或者你可以做局部刷新。看到here

+0

但保存按鈕後會有一些數據庫操作,我認爲JavaScript會先工作,那裏不會是數據庫操作。不是嗎? –

+0

如果您使用Ajax Web方法並且只能在成功時運行,您總是可以延遲此操作。看到這裏(http:// encosia。com /使用jQuery的直接調用aspnet-ajax頁面方法/) – Zaki

+0

我使用window.close();爲了關閉子窗口,我在父類中編寫了一個名爲Foo()的重載JavaScript函數,並且我使用window.opener.Foo()來達到它。 –

0

必須存儲變量會話,DB或...

,並使用這個鏈接。

http://forums.asp.net/t/1606853.aspx/1

+0

您不應該通過JavaScript更改服務器端控件,否則您將獲得安全錯誤:http://stackoverflow.com/q/5024154/91696 – Albireo

0

不這樣做不同的頁面上,因爲你不能從其他網頁更新您的領域。您可以按照時間間隔從contact.aspx發出ajax請求,並且您可以檢查數據庫是否有新用戶並刷新它。但這不是一個好的解決方案。所以我建議在contact.aspx上進行這個註冊(在stackoverflow.aspx上),在iframe中或者在div中。您可以在每個操作中隱藏每個內容(當您註冊時,隱藏其餘內容只需顯示註冊字段,如果您已完成刷新下拉列表,請重置您的註冊字段並隱藏它們,顯示下拉列表)。使用此方法,您可以刷新你的下拉列表,當你完成註冊。

要刷新下拉列表,請創建一個ajax調用,您可以從db中獲取新值(可以有多個新值同時由不同用戶提交),然後您更新下拉菜單(這是一個select with HTML中的選項)但是,如果你這樣做,你可以得到一個eventvalidation錯誤,這是一個內置的asp.Net特性(防禦xss攻擊)。因此,解決方案可以是在註冊後進行完整回發,並通過服務器代碼刷新值,或者不使用服務器控件來下拉列表,只選擇html並將其填充到文檔中,然後使用javascript或jQuery將其刷新爲異步。

0

mmm,在用戶點擊保存後的stackoverflow.aspx中,它發佈到服務器,創建一個新用戶並獲取對象的JSON表示。然後註冊一個腳本來關閉窗口並將json傳遞給opener。

private btnSave_Click(object sender, EventArgs args) 
{ 
    //Save data 
    ... 

    string objectJson = GetJSON(); // {"userId": 100, "name": "John Smith"} 

    ClientScriptManager cs = Page.ClientScript; 
    StringBuilder cstext1 = new StringBuilder(); 
    cstext1.Append("<script type=text/javascript> window.opener.appendObject(" + objectJson + ") </"); 
    cstext1.Append("script>"); 

    cs.RegisterStartupScript(this.GetType(), "RefreshScript", cstext1.ToString()); 
} 

在contacts.aspx有以下腳本:

<script type="text/javascript"> 
    function appendObject(json) { 
     var obj = JSON.parse(json); //convert json to object 

     //Add item to the drop down list. 
     var x = document.getElementById("mySelect"); 
     var option = document.createElement("option"); 
     option.text = obj.name; 
     try 
     { 
      // for IE earlier than version 8 
      x.add(option, x.options[null]); 
     } 
     catch (e) 
     { 
      x.add(option,null); 
     } 

    } 
</script> 

沒有測試它,但我認爲它的工作原理。

相關問題