如何更改另一页';s在aspx中的下拉列表

本文关键字:aspx 下拉列表 何更改 一页 | 更新日期: 2023-09-27 18:19:48

我有一个名为contact.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将打开,我想输入新的用户数据并单击保存。单击"保存按钮"后,如何关闭stackoverflow.aspx并仅刷新contact.aspx上的下拉列表

如何更改另一页';s在aspx中的下拉列表

您可以使用以下Javascript代码关闭子窗口并刷新父窗口(ref):

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

或者可以进行部分刷新。请参阅此处

您必须将变量存储在会话、数据库或。。。

并使用此链接。

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

不要在其他页面上执行此操作,因为您无法从其他页面更新字段。您可以每隔一段时间从contact.aspx发出ajax请求,还可以检查DB是否有新用户,并刷新它。但这不是一个好的解决方案。因此,我建议在contact.aspx、iframe或div中进行此注册(位于stackoverflow.aspx上)。你可以在每个操作中隐藏每个内容(当你注册时,隐藏其余内容只显示注册字段,如果你完成了刷新下拉列表重置你的注册字段并隐藏它们,显示下拉列表)。使用这种方法,你可以在完成注册时刷新你的下拉列表。

要刷新dropdownlist,请进行ajax调用,在那里您可以从数据库中获取新值(不同用户可以同时提交多个新值),然后刷新下拉列表(wich是HTML中的一个选项选择)。但如果您这样做,您可能会得到一个事件验证错误,这是一个内置的asp。Net功能(防御xss攻击)。因此,解决方案可以是在注册后进行完整的回发,并通过服务器代码刷新值,或者不使用服务器控件来下拉列表,只选择html,并在文档就绪时填充,并通过javascript或jQuery异步刷新。

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>

没有测试,但我认为它有效。