我有一个场景,我想检查用户是否再次添加same date
和same region
数据,它应该给他一个提示警告。
我尝试使用代码,如下所示: -
protected void btnSave_Click(object sender, EventArgs e)
{
DataTable dtExcel = new DataTable();
dtExcel.Clear();
string StrCount = String.Empty;
string connString = "";
HttpPostedFile File = FileUpload1.PostedFile;
string strFileType = Path.GetExtension(FileUpload1.FileName).ToLower();
string path = FileUpload1.PostedFile.FileName;
string Filename = path.Substring(path.LastIndexOf("\\") + 1, path.Length - path.LastIndexOf("\\") - 1);
path = Server.MapPath(@"~/Excels/" + "/" + Filename.ToString());
File.SaveAs(path);
if (strFileType.Trim() == ".xls")
{
connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
}
else if (strFileType.Trim() == ".xlsx")
{
connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
}
string query = "SELECT * FROM [Sheet 1$]";
OleDbConnection conn = new OleDbConnection(connString);
conn.Close();
if (conn.State == ConnectionState.Closed)
conn.Open();
OleDbCommand cmd = new OleDbCommand(query, conn);
OleDbDataAdapter daExcel = new OleDbDataAdapter(cmd);
daExcel.Fill(dtExcel);
conn.Close();
DataTable DtMain = CF.ExecuteDT("select Tran_type, Order_Date, Region_Mkey from WMS_Future_Del_Order_Hdr where Tran_type = '" + CmbTypeOfAsn.SelectedValue + "' and Order_Date = convert(datetime,'" + TxtEdate.Value + "',103) and Region_Mkey = '" + ddlRegion.SelectedValue + "'"); // checks the duplicate records here
if (DtMain.Rows.Count > 0)
{
ClientScript.RegisterStartupScript(this.GetType(), "SuccessScript", "myTestFunction()", true);
}
另请参阅我的提示重复消息提醒的功能
function myTestFunction() {
if (confirm('Are you sure you want to override the file ?')) {
return true;
}
else {
return false;
}
}
但是这里发生的事情即使在取消点击后,也会上传并保存excel文件。我不知道为什么
答案 0 :(得分:2)
虽然基于AJAX的 Abbas Kapasi 解决方案很好(并且您不希望/不能使用基于CheckBox的解决方案,正如我在其他帖子中所建议的那样{{3如果您不熟悉AJAX或者不想使用AJAX,那么您可以使用以下方法实现它。这可能看起来有点奇怪,但您可以根据您的要求进行修改:
LinkButtonLoad
和LinkButtonOverwrite
LinkButtonLoad
将附加到上传和查找现有文件/记录的主程序的调用。 LinkButtonOverwrite
将调用该过程来写入/覆盖记录。 LinkButtonOverwrite将保持隐藏来自用户。Cancel/No
,则该过程将不会继续。如果用户选择OK/Yes
,那么我将调用链接到LinkButton2的过程来覆盖记录。现在把它们放在一起:
在aspx /前端
<asp:LinkButton ID="LinkButtonLoad" runat="server" Text="Load Records" CssClass="button" ... />
<asp:LinkButton ID="LinkButtonOverwrite" runat="server" Text="ow" CssClass="button hidden" ... />
我使用hidden
CSS类来隐藏按钮.hidden {display: none;}
。不要使用visible="false"
属性,它在客户端不可用。
客户端的JavaScript:
function myTestFunction() {
if (confirm('Are you sure you want to override the file ?')) {
// get the action attribute of the hidden LinkButtonOverwrite here and call it on OK
// as an alternative you may also invoke the click event of this button
var defaultAction = $('#<%=LinkButtonOverwrite.ClientID %>').prop("href");
window.location.href = defaultAction;
}
else {
return false;
}
}
后面的代码中的LinkButtonLoad:
protected void LinkButtonLoad_Click(object sender, EventArgs e)
{
//==============================================================
// YOUR CODE TO UPLOAD THE FILE, SAVE IT SO WE MAY USE IT AGAIN
//==============================================================
if (DtMain.Rows.Count > 0)
{
ClientScript.RegisterStartupScript(this.GetType(), "SuccessScript", "myTestFunction()", true);
}
else
{
MySubToOverwrite();
}
}
后面的代码中的LinkButtonOverwrite:
protected void LinkButtonOverwrite_Click(object sender, EventArgs e)
{
//===========================================================
// AS THE FILE IS ALREADY UPLOADED IN LINKBUTTONUPLOAD_CLICK
// YOU MAY ACCESS IT AND PERFORM REQUIRED OPERATIONS
//===========================================================
MySubToOverwrite();
}
后面的MySubToOverwrite()代码:
private void MySubToOverwrite()
{
//==========================================================
// OVERWRITE YOUR RECORDS HERE
// FROM THE FILE ALREADY UPLOADED IN LINKBUTTONUPLOAD_CLICK
//==========================================================
}
答案 1 :(得分:1)
检测重复记录
有几种方法可以做到这一点。按照我的个人喜好,点击这里的大图:
取消PostBack (如果使用选项3或其他回发方法)
你需要绑定到正确的按钮,并防止POST到服务器(AKA&#34;回发&#34;),你必须return false
呈现的click
input type="button"
事件处理程序
或
submit
form
事件处理程序
您可以通过在myTestFunction()
本身中将返回值嵌入asp:Button
来实现此目的:
<asp:Button ID="btnSave" runat="server" Text="Save"
OnClientClick="if(!myTestFunction()){return false;}"
OnClick="btnSave_Click" />
<script>
function myTestFunction() {
return confirm('Override the file?');
}
</script>
答案 2 :(得分:0)
使用web服务的ajax函数来检查相同的数据和区域
提交按钮代码
<asp:Button ID="btnupload" runat="server" OnClientClick="javascript return checkData()"
Text="Upload" OnClick="btnupload_Click"></asp:Button>
Javacript
<script>
function checkData() {
$.ajax({
type: "POST",
url: "demo.aspx/functionName1",
data: "{parameter1:'" + param1 "',parameter2:'" + param2 + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
if(msg.d == 'Yes'){
if (confirm('Are you sure you want to override the file ?')) {
return true;
}
else {
return false;
}
}
else{
return true;
}
}
});
}
</script>
C#代码
using System.Web.Services; --- use this class
[WebMethod]
public static string functionName1(string parameter1, string parameter2)
{
------------------------------;
if(check Condition)
return "Yes";
else
return "No"
}
答案 3 :(得分:0)
实际上,您只需要以下内容即可使其正常运行。使用RegisterOnSubmitStatement
代替RegisterStartupScript
。它允许您添加为响应按钮的onclick
事件而执行的脚本。该脚本在调用按钮事件之前执行,并为您提供取消事件的机会。
<强> Code-behind:
强>
protected void Page_Load(object sender, EventArgs e)
{
// You can place this in any method where you want to do the validation.
String scriptText =
"return confirm('Are you sure you want to override the file ?')";
ClientScript.RegisterOnSubmitStatement(this.GetType(),
"ConfirmSubmit", scriptText);
}
protected void btnSave_Click(object sender, EventArgs e)
{
}
<强> Markup :
强>
<asp:Button id="ConfirmSubmit" runat="server" OnClick="btnSave_Click"/>