如何在aspx中更改其他页面的下拉列表?

时间:2013-06-24 07:59:40

标签: c# c#-4.0

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

4 个答案:

答案 0 :(得分:0)

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

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

或者你可以做部分刷新。见here

答案 1 :(得分:0)

你必须在session,db或......

中存储变量

并使用此链接。

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

mmm,在用户单击“保存”后的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>

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