我知道有很多类似的问题,但我没有看到任何相同的问题。我有一个ASPX页面并使用javascript来显示确认弹出窗口。单击按钮时,不会使用我单击的值,而是使用之前的值。所以如果我第一次取消就点击OK。如果我再次单击“确定”,则转到“确定”,如果单击“取消”,则它仍然转到“确定”,我再次单击“取消”,然后取消。我确定这是Postback的一个问题,但我不知道如何解决它,因为我没有在点击按钮上调用javascript,但稍后。我使用我的代码来确定记录是否重复,如果是,我会显示让用户知道的弹出窗口,并为他们提供接受或取消的选项。如果没有重复,则不会调用弹出窗口的脚本。那么我该如何解决这个问题呢?
我的ASPX中的Javascript
function Confirm() {
var confirm_value = document.createElement("INPUT");
confirm_value.type = "hidden";
confirm_value.name = "confirm_value";
if (confirm("Duplicate Record. Do you want to save?")) {
confirm_value.value = "Yes";
} else {
confirm_value.value = "No";
}
document.forms[0].appendChild(confirm_value);
}
这是来自我的CS的代码,在测试条件后从一个方法调用。
ScriptManager.RegisterStartupScript(this, base.GetType(), "confirmation", "Confirm();", true);
string confirmValue = Request.Form["confirm_value"];
if (confirmValue == "Yes")
{
this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked YES!')", true);
}
else
{
this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked NO!')", true);
}
注意:我对同一页面上的几个字段使用AutoPostBack作为数据输入表单,并且取决于为一个字段选择的内容取决于将如何填充另一个字段。
答案 0 :(得分:0)
这是一种方法。
在标记中,您可以添加隐藏字段以监控是否必须覆盖重复数据。在下面的示例中,btnSaveData
是表单中可能已存在的按钮。
<asp:HiddenField ID="hiddenOverwriteData" runat="server" Value="false" />
<asp:Button ID="btnSaveData" runat="server" Text="Save data" OnClick="btnSaveData_OnClick" />
按钮单击的事件处理程序应检查数据是否已存在。如果是,则注册客户端脚本;如果没有,则保存新数据。
protected void btnSaveData_OnClick(object sender, EventArgs e)
{
// Check if the data record already exists
bool isDuplicate = ...
if (isDuplicate)
{
ScriptManager.RegisterStartupScript(this, this.GetType(), "ConfirmSave", "confirmSaveData();", true);
}
else
{
DoSaveData();
}
}
private void DoSaveData()
{
// Actually save the data
...
}
Javascript函数要求确认。如果用户确认,则隐藏字段的值设置为true
并再次提交表单;如果没有,则取消保存操作。
<script type="text/javascript">
function confirmSaveData() {
if (confirm("Duplicate data. Do you want to overwrite?")) {
var hiddenOverwriteData = document.getElementById('<%= hiddenOverwriteData.ClientID %>');
hiddenOverwriteData.value = 'true';
form1.submit();
}
}
</script>
在Page_Load
中,我们检查用户是否刚刚确认应该覆盖重复数据,在这种情况下保存数据并重置隐藏字段值。
protected void Page_Load(object sender, EventArgs e)
{
if (hiddenOverwriteData.Value == "true")
{
hiddenOverwriteData.Value = "false";
DoSaveData();
}
}