如何更改另一页';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上的下拉列表?
您可以使用以下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>
没有测试,但我认为它有效。