巨难:showModelWindow中的怪问题,求救高手。

lizhengCSDNnet 2004-01-06 12:07:08
private void Save_Click(object sender, System.EventArgs e)
{ SqlConnection conn=new SqlConnection(connstr);
try
{
conn.Open();
string commstr="update iteminfo set model_no='"+model_no.Text+"',pkclass='"+pkclass.Text+"',freq='"+freq.Text+"',";
commstr=commstr+"func='"+func.Text+"' where id="+int.Parse(id)+"";
SqlCommand comm=new SqlCommand(commstr,conn);
comm.ExecuteNonQuery();
Response.Write("<script>alert('保存成功!');</script>");
}
catch(SqlException ex){Response.Write("<script>alert('保存失败,错误原因:"+ex.Message+"');</script>");}
finally{conn.Close();}
}
一、为什么我保存成功的时候,出现了两个一模一样的模态窗口。保存成功提示出现在第二个,不是在我的那个窗口中弹出来的?如何解决?
二、在该模态窗口中我一定要用private static string id;如果不加static在保存的时候id(它来自于父窗口传递的参数)值为空。但是在窗体第一次加载的时候是有值的。什么原因,刚转向C#就有这样的问题??
三、按思归办法:说在模态窗口中点一按钮可执行父窗口中某按钮的事件。
可是我试了都不行,不按是服务器按钮或html按钮。
in父窗口:
var ret = showModalDialog("new.aspx",window);
in 模态窗口 (note, it is a client side button)
<input type=button value="click" onclick="window.dialogArguments.document.getElementById('Button2').click()">
其实我的目录就是在模态窗口中更改后,在父窗口刷新而己。最后40分了,我知道100就值得,谢谢大家了。
...全文
333 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
brightstar 2004-07-16
  • 打赏
  • 举报
回复
好帖
qnetsoft 2004-04-19
  • 打赏
  • 举报
回复
UP
laicool 2004-04-02
  • 打赏
  • 举报
回复
对Webdiyer表示感谢。
lizhengCSDNnet 2004-01-06
  • 打赏
  • 举报
回复
问题3怎么不行?有没有其它好办法解决?谢谢你的代码?
webdiyer 2004-01-06
  • 打赏
  • 举报
回复
一、需要用框架,将你的aspx页包含在框架中,然后在模态窗口中打开此框架页,这样aspx页面回发后就不会打开新窗口;
二、你可以将该值保存在ViewState中,而不用保存成静态变量;
lizhengCSDNnet 2004-01-06
  • 打赏
  • 举报
回复
这是思归写的,孟子E章也说可以.可我试了就是不行.
jiayuanliao 2004-01-06
  • 打赏
  • 举报
回复
Response.ExpiresAbsolute = System.DateTime.Now;
Response.Expires = 0;
Response.CacheControl = "no-cache";


问题二觉得是你的id赋值有问题,
你提交弹了新窗口,<input type=button value="click" onclick="window.dialogArguments.document.getElementById('Button2').click()">
肯定不行吧?得先解决第一个问题才行。
lizhengCSDNnet 2004-01-06
  • 打赏
  • 举报
回复
问题二的清除缓存如何写代码?其实不在模态窗口中也是一样的.
长江支流 2004-01-06
  • 打赏
  • 举报
回复
一、在html页面上加上<base target="_self">,否则,只要页面提交,模态窗口会再弹出一个

二、由于缓存的原因,回此在page_load中加一个清除缓存的语句即可
lizhengCSDNnet 2004-01-06
  • 打赏
  • 举报
回复
问题二和在谁能帮我解决?
acewang 2004-01-06
  • 打赏
  • 举报
回复
页面上加上这句:<base target="_self">
lizhengCSDNnet 2004-01-06
  • 打赏
  • 举报
回复
高手。结贴
zj492 2004-01-06
  • 打赏
  • 举报
回复
关注
webdiyer 2004-01-06
  • 打赏
  • 举报
回复
frame.htm
---------------------------------
<HTML><HEAD><TITLE> 在模态窗口中打开的框架页 </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="Webdiyer">
</HEAD>

<BODY topmargin=0 leftmargin=0 scroll=no>
<iframe width="100%" height="100%" border=0 id="frame1"></iframe>
<script Language="Javascript">
var el=document.frames.frame1;
if(el!=null){
var arg=window.dialogArguments;
if(arg!=null)
frame1.location.href=arg;
}
</script>
</BODY>
</HTML>
webdiyer 2004-01-06
  • 打赏
  • 举报
回复
AddOrEdituser.aspx
-------------------------------------

<%@Import Namespace="System.Data"%>
<%@Page debug=true%>
<script runat="server" Language="C#">
DataTable table;
void Page_Load(object src,EventArgs e){
if(!Page.IsPostBack){
string type=Request.QueryString["type"];
string idStr=Request.QueryString["id"];
if(type=="edit"){
if(idStr!=null&&idStr.Trim().Length>0)
{
int id=int.Parse(idStr);
table=(DataTable)Cache["TestTable"];
DataRow row=table.Rows.Find(id);
if(row!=null){
namebox.Text=(string)row["姓名"];
addrbox.Text=(string)row["住址"];
agebox.Text=row["年龄"].ToString();
ViewState["Action"]="Edit";
ViewState["UserID"]=id;
titlelbl.Text="修改用户信息";
button1.Text="更新(U)";
button1.AccessKey="U";
}
}
}
else{
titlelbl.Text="添加新用户";
button1.Text="添加(A)";
button1.AccessKey="A";
}
}
}

void AddNewUser(object src,EventArgs e){
table=(DataTable)Cache["TestTable"];
if(table==null){
table=new DataTable();
DataColumn column=new DataColumn("序号",typeof(int));
column.AutoIncrement=true;
column.AutoIncrementSeed=1;
column.Unique=true;
table.Columns.Add(column);
table.Columns.Add(new DataColumn("姓名",typeof(string)));
table.Columns.Add(new DataColumn("住址",typeof(string)));
table.Columns.Add(new DataColumn("年龄",typeof(int)));
}
if((string)ViewState["Action"]=="Edit"){
foreach(DataRow row in table.Rows){
if((int)row["序号"]==(int)ViewState["UserID"]){
row["姓名"]=namebox.Text.Trim();
row["住址"]=addrbox.Text.Trim();
row["年龄"]=int.Parse(agebox.Text);
Cache["TestTable"]=table;
break;
}
}
}
else{
DataRow row=table.NewRow();
row["姓名"]=namebox.Text.Trim();
row["住址"]=addrbox.Text.Trim();
row["年龄"]=int.Parse(agebox.Text);
table.Rows.Add(row);
Cache["TestTable"]=table;
}
foreach(DataRow row in table.Rows){
Response.Write(row["姓名"]);
}
Response.Write("<script language=\'Javascript\'>window.returnValue=1;top.close();<");
Response.Write("/");
Response.Write("script>");
Response.End();
}
</script>
<HTML>
<HEAD>
<TITLE> Webdiyer 制造:) (www.webdiyer.com) </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="Webdiyer">
</HEAD>

<BODY topmargin=1 leftmargin=1 scroll=no>
<form runat="server">
<table width="100%" border=1 cellspacing=0 style="border-collapse:collapse" bgcolor="snow">
<tr><td colspan=2 bgcolor=#9999FF><asp:Label runat="server" forecolor="red" font-bold=true id="titlelbl"/></td></tr>
<tr><td width="20%">姓名</td>
<td width="80%"><asp:TextBox runat="server" id="namebox"/><asp:RequiredFieldValidator runat="server" Text="请输入" ControlToValidate="namebox" Display="dynamic"/></td></tr>
<tr><td>住址:</td>
<td><asp:TextBox runat="server" id="addrbox"/><asp:RequiredFieldValidator runat="server" Text="请输入" ControlToValidate="addrbox" Display="dynamic"/></td></tr>
<tr><td>年龄:</td>
<td><asp:TextBox runat="server" id="agebox"/><asp:RequiredFieldValidator runat="server" Text="请输入" ControlToValidate="agebox" Display="dynamic"/>
<asp:CompareValidator runat="server" Operator="DataTypeCheck" ControlToValidate="agebox" Type="integer" Display="dynamic" Text="非数字"/></td></tr>
<tr><td colspan=2 align="center">
<asp:Button Text="添加(A)" AccessKey="A" onclick="AddNewUser" runat="server" id="button1"/>
<button onclick="top.close()" accesskey="C">取消(C)</button>
</table>
</form>
</BODY>
</HTML>
webdiyer 2004-01-06
  • 打赏
  • 举报
回复
给你写了一个示例,可以解决你提的三个问题,而且也解决了笑望人生兄说的接受QueryString的问题,将下面三个文件分别保存后运行DataGrid.aspx即可看到效果(因为是用EditPlus写的,为方便起见,后台代码和前台代码都写到了一个页面上,并且使用了临时创建的Cache代替数据库来保存数据):

DataGrid.aspx
-----------------------------------------
<%@Import Namespace="System.Data"%>
<%@Page debug=true%>
<script runat="server" Language="C#">
void Page_Load(object src,EventArgs e){
if(!Page.IsPostBack){
BindData();
}
}

void BindData(){
DataTable table=(DataTable)Cache["TestTable"];
if(table==null){
table=new DataTable();
DataColumn column=new DataColumn("序号",typeof(int));
column.AutoIncrement=true;
column.AutoIncrementSeed=1;
column.Unique=true;
table.Columns.Add(column);
table.Columns.Add(new DataColumn("姓名",typeof(string)));
table.Columns.Add(new DataColumn("住址",typeof(string)));
table.Columns.Add(new DataColumn("年龄",typeof(int)));
DataRow row=table.NewRow();
row["姓名"]="张三";
row["住址"]="陕西省吴旗县";
row["年龄"]=22;
table.Rows.Add(row);
row=table.NewRow();
row["姓名"]="李四";
row["住址"]="陕西省延安市";
row["年龄"]=26;
table.Rows.Add(row);
table.PrimaryKey=new DataColumn[]{column};
Cache["TestTable"]=table;
}
grid1.DataSource=table;
grid1.DataBind();
//Cache.Remove("TestTable");
}

void BindScript(object src,DataGridItemEventArgs e){
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem){
e.Item.Attributes.Add("style","cursor:hand");
e.Item.Attributes.Add("ondblclick","AddOrEditUser("+grid1.DataKeys[e.Item.ItemIndex].ToString()+")");
}
}
</script>
<HTML>
<HEAD>
<TITLE> Webdiyer 制造:) (www.webdiyer.com) </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="Webdiyer">
</HEAD>

<BODY>
<form runat="server">
<table width="760" align="center" border=0 cellspacing=0><tr><td>
<asp:datagrid id="grid1" runat="server" Width="100%" HorizontalAlign="Center" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" BackColor="White" CellPadding="3" GridLines="Horizontal" OnItemDataBound="BindScript" DataKeyField="序号">
<SelectedItemStyle Font-Bold="True" ForeColor="#F7F7F7" BackColor="#738A9C"></SelectedItemStyle>
<AlternatingItemStyle BackColor="#F7F7F7"></AlternatingItemStyle>
<ItemStyle ForeColor="#4A3C8C" BackColor="#E7E7FF"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#F7F7F7" BackColor="#4A3C8C"></HeaderStyle>
<FooterStyle ForeColor="#4A3C8C" BackColor="#B5C7DE"></FooterStyle>
<PagerStyle HorizontalAlign="Right" ForeColor="#4A3C8C" BackColor="#E7E7FF" Mode="NumericPages"></PagerStyle>
</asp:datagrid>
</td></tr>
<tr><td align="right"><a href="#" onclick="AddOrEditUser(null)">添加新用户</a>
</td></tr>
<tr><td>在DataGrid任意行上双击可进行编辑</td></tr></table>
</form>
<SCRIPT LANGUAGE="JavaScript">
<!--
function AddOrEditUser(userID){
var argument;
if(userID!=null)
argument="AddOrEditUser.aspx?type=edit&id="+userID;
else
argument="AddOrEditUser.aspx";
var retValue=window.showModalDialog("frame.htm",argument,"dialogWidth=400px;dialogHeight=160px;center=yes;status=no");
if(retValue==1)
top.location.href=top.location.href;
}
//-->

</SCRIPT></BODY></HTML>
lizhengCSDNnet 2004-01-06
  • 打赏
  • 举报
回复
to: Jouzen

1.如果传递的是显示的已经有的数据 比如你的id就是第一列
从客户端得到的DataGrid其实是一个表格 从表格中的rows[i].cells(n).innerText得到
==================》》》》》》》》》》》
请写出在javascrit客户端获取mydatagrid的当前选择行第一个单元格的文本。

TomMax(笑望人生)
===========>>>>>>>>>>>>>
一样的道理,如何获取mydatagrid的当前选择行第一个单元格的文本。
  • 打赏
  • 举报
回复
参数用Session行不?
Jouzen 2004-01-06
  • 打赏
  • 举报
回复
在<head></head>之间加入<base target="_self">我也试验了,不能防止提交生成新窗口

----可能是没有清缓存 加以下..
<%
Response.Buffer=true;
Response.ExpiresAbsolute=System.DateTime.Now.AddSeconds(-1);
Response.Expires=0;
Response.CacheControl="no-cache";
%>
  • 打赏
  • 举报
回复
关于第二个问题,在生成的末态对话框中操作父窗口刷新:
父窗口打开对话框代码
<script language="javascript">
function OpenDialog()
{
var url;
url ="...."; // 打开的模态对话框内.aspx文件地址,可以加查询字符串参数
var me;
me = window; // 定义引用父页面的窗体对象,准备传递
window.showModalDialog(url,me,"[末态对话框的宽高度样式定义]");
}
</script>

模态对话框打开的.aspx文件刷新父页面:
<script language="javascript">
funcation Flush()
{
if(dialogArguments != null)
{
dialogArguments.location.reload(true);
}
}
</script>
加载更多回复(29)

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧