1

我有一个名为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 处刷新下拉菜单?

4

4 回答 4

0

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

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

或者您可以进行部分刷新。看这里

于 2013-06-24T08:08:44.760 回答
0

您必须将变量存储在 session 、 db 或...

并使用此链接。

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

于 2013-06-24T08:26:30.860 回答
0

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

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

于 2013-06-24T08:55:48.100 回答
0

嗯,在用户单击保存后的 stackoverflow.aspx 上,它会发布到服务器,创建一个新用户并获取对象的 JSON 表示。然后注册一个脚本来关闭窗口并将json传递给开启者。

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>

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

于 2013-06-24T10:02:30.083 回答