点击删除按钮之后,用 window.close();关闭之后,重新打开这个页面才可以刷新页面。但是用window.location.reload(); 不能刷新页面。这是为什么,哪位大侠看看怎么处理?谢谢
(注意:上面的窗体是window.showModalDialog弹出来的页面)
主要代码:
JS:
<script type="text/javascript" language="javascript">
function deleteFile(strKeyId) {//我们就是通过这个函数来异步获取信息的
//alert(document.getElementById("HiddenField3").value);
//if (document.getElementById("HiddenField3").value == "0") {
// alert("你没有删除权限!");
// return false;
//}
debugger
var xmlHttpReq = null;
if (window.ActiveXObject) {
xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttpReq = new XMLHttpRequest();
}
else {
xmlHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
}
//alert(xmlHttpReq);
if (xmlHttpReq != null) {//如果对象实例化成功 我们就可以干活啦
xmlHttpReq.open("POST", "DeleteFile.aspx?id=" + strKeyId, true);
//调用open()方法并采用异步方式
xmlHttpReq.send(null); //因为使用get方式提交,所以可以使用null参调用
//document.execCommand('Refresh');
window.close();
//window.location.reload();
//location.reload();
//alert("2");
//alert("3");
//window.location.reload(location.href);
//location.replace(location.href);
//window.navigate(location)
}
}
</script>
<asp:DataList ID="DataList1" runat="server"
BorderWidth="0px" Width="100%" onitemdatabound="DataList1_ItemDataBound"
BorderStyle="None">
<%-- OnDeleteCommand="DataList1_DeleteCommand" OnSelectedIndexChanged="DataList1_SelectedIndexChanged"
OnItemDataBound="DataList1_ItemDataBound" --%>
<ItemTemplate>
<table style="height: 40px;border-bottom:1px solid #c4ddff; line-height:40px;" width="100%">
<tr>
<td style="font-size: 12px;padding-left:10px;" width="67%"> <%# Eval("Title")%></td>
<td style="font-size: 12px;" width="18%">
<%# Convert.ToDateTime(Eval("CreatedOn").ToString()).ToShortDateString().ToString()%>
</td>
<td style="font-size: 12px;" width="15%" align="left" id="td2" runat="server">
<input id='<%# Eval("New_kbarticlecommentId")%>' type="button" onclick='javascript: deleteFile(this.id);' value="" class="buttondel"/>//删除按钮
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
DeleteFile.aspx:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.IO;
namespace Lovol_FileDownUpload
{
public partial class DeleteFile : System.Web.UI.Page
{
CrmUtil cu = new CrmUtil();
protected void Page_Load(object sender, EventArgs e)
{
string id = Request["id"].ToString();
StringBuilder sbSQLText = new StringBuilder();
sbSQLText.AppendLine("update LOVOL_MSCRM.dbo.New_kbarticlecommentBase set DeletionStateCode=2 where New_kbarticlecommentId='" + id + "'");
//cu.WriteLog("更新主记录" + sbSQLText.ToString());
SqlCommand cmd = new SqlCommand(sbSQLText.ToString());
cu.ExecuteBySQL(cmd);
StringBuilder sbSql = new StringBuilder();
sbSql.AppendLine("select New_name from LOVOL_MSCRM.dbo.New_kbarticlecomment");
sbSql.AppendLine("where New_kbarticlecommentId=@New_kbarticlecommentId");
SqlCommand cmd1 = new SqlCommand(sbSql.ToString());
cmd1.Parameters.Add("@New_kbarticlecommentId", SqlDbType.UniqueIdentifier).Value = new Guid(id);
DataTable dt = cu.QueryBySql(cmd1);
if (dt.Rows.Count > 0)
{
string filepath = MapPath("upload/" + dt.Rows[0][0].ToString());
if (File.Exists(filepath))
{
File.Delete(filepath);
} }
}
}
}
你删除那一项,不知道你是不是ajax删除的,如果是,可以通过服务器端返回是否删除成功的标志,来js移除这一行
因为 网页、asp.net 的控件不是基于数据驱动,没有你想象的那么聪明。就算数据源发生了变化,也不会自动通知界面刷新,需要触发一个服务器端的事件来刷新页面。
两种方法解决,1如果在事件中刪除,可在数据库中执行刪除时,建立触发器实现数据查询2若不想麻烦,在刪除后添加查询语句的方法
在删除代码后面再bind一次显示的方法
没太看明白
控件ID.DataBind()自带的一个方法
但是页面刷新的效果是很差的,建议用jquery移除一行。
多谢各位大侠,问题其实好久之前就解决了,一直没把答案贴出来,多谢了。
步骤如下:
1 前台放一个按钮。设置为隐藏。注意:不能直接设置Visible=false的方式,这样的话在ASP.Net 2.0编译后的代码里是找不到这个按钮的。需要设置风格:style="display:none;"
2 双击按钮,写入C#方法,或者写一个调用后台其他方法的代码段
3 前台JS调用的时候,照如下写,这样可以模拟按钮的点击事件,触发后台方法:document.getElementById("Button2").click()
JS:document.getElementById("btnR").click();
css: .uplodadbtn{ display:none;}
<asp:Button ID="btnR" runat="server" onclick="btnR_Click" CssClass="uplodadbtn"/>
C#: protected void btnR_Click(object sender, EventArgs e)
{
bind();
}