我有一个名为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和仅刷新下拉列表?
答案 0 :(得分:0)
您可以使用以下Javascript代码关闭子窗口并刷新父级(ref):
window.close();
if (window.opener && !window.opener.closed) {
window.opener.location.reload();
}
或者你可以做部分刷新。见here
答案 1 :(得分:0)
答案 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>
没有测试它,但我认为它有效。