【问题标题】:Conditional confirm prompt in asp.net code behind后面的asp.net代码中的条件确认提示
【发布时间】:2011-10-06 15:42:49
【问题描述】:

我已经四处寻找实现这一点的方法。这是我所拥有的伪代码表示:

bool hasData = ItemHasData(itemid);
Confirm = "false"; // hidden variable

if (hasData)
{
    //Code to call confirm(message) returns "true" or "false"
    if (Confirm == "true")
    {
         //Delete item
    }
    else if (Confirm == "false")
    {
         return;
    }
}

调用confirm 的代码使用asp:Literal 控件并将其设置为与confirm 相同。我可以得到弹出窗口,但只有在函数退出后。并且它对之后的条件没有任何作用。

普遍的共识似乎是在该特定行调用 javascript 是不可能的(由于服务器端/客户端的差距,这是有道理的),但我该如何实现呢?我尝试使用 ASP.NET AJAX Toolkit 中的 ConfirmButtonExtender,但是当对象设置为 runat="server" 时,我无法与后面代码中的 confirmbuttonextender 对象进行交互。

编辑:

抱歉,我确实错过了这些花絮。谢谢伊卡洛斯。

控件本身就是GridView(伪版其实是来自gvData_RowCommand函数)的rowcommand。第一个检查是查看 CommandName 是否为 DeleteItem,如果是,则进入此检查。

gvData 的列是根据传递的标题列表(和数据集)设置的,因为它正在处理的表是针对具有不同所需信息的多个项目。 gvData 的数据在那里,我只需要得到一个是/否(或者实际上它最终会是确定/取消)对话框来验证他们想要在有数据时删除该项目。

【问题讨论】:

  • 在不知道我们在谈论什么样的控件以及如何将数据绑定到它的情况下很难给你示例代码
  • 我不知道使用其他方法,例如ModalPopup 作为 ConfirmBox,使其在代码隐藏(Show)中可见,退出函数,处理弹出窗口的事件并根据用户在那里选择的内容执行您需要的任何操作。

标签: javascript asp.net ajax confirm


【解决方案1】:

在某些情况下我最终使用的一种方法是使用一个面板来显示确认/取消按钮。这避免了处理 JavaScript 事件的需要并完全使用 ASP.NET。

<asp:Panel ID="pDeleteConfirm" runat="server"
    CssClass="AlertDialog"
    Visible="False">
    <p>Do you wish to delete the selected record?<br />
    <asp:Button ID="btDeleteYes" runat="server" OnClick="btDelete_Click" Text="Delete" />
    <asp:Button ID="btDeleteNo" runat="server" OnClick="btDelete_Click" Text="Cancel" />
    </p>
</asp:Panel>

<asp:GridView ID="gvData" runat="server"
    AutoGenerateColumns="False" 
    CssClass="GridView"
    DataKeyNames="ID"
    DataSourceID="sqlData"
    EmptyDataText="There is no data entered in the system."
    OnRowDeleting="gvData_RowDeleting">
    ......
</asp:GridView>

我使用OnRowDeleting 事件来显示面板

protected void gvData_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    // Show confirmation dialog
    pDeleteConfirm.Visible = true;

    // Select the row to delete
    gvData.SelectedIndex = e.RowIndex;

    // Cancel the delete so the user can use the confirm box
    e.Cancel = true;
}

处理按钮Click事件

protected void btDelete_Click(object sender, EventArgs e)
{
    Button bt = (Button)sender;
    switch (bt.ID)
    {
        case "btDeleteYes": // they confirmed a delete
            sqlData.Delete();
            break;

        case "btDeleteNo": // they clicked cancel
            // Do nothing
            break;

        default:
            throw new Exception("Unknow button click in btDelete_Click");
    }
    // clear selection and hide the confirm box
    gvData.SelectedIndex = -1;
    pDeleteConfirm.Visible = false;
}

这不是 JavaScript,但您可以添加一些 UpdatePanels 来对其进行 AJAX 工作。

只有一种方法可以通过 ASP.NET 而不是 JavaScript 处理来实现。

【讨论】:

  • 我正在努力实现这一点,但这似乎最终会成为要走的路。如果我能正确处理它,将标记为正确。
【解决方案2】:

代码隐藏的工作是将 HTML 呈现给浏览器。它执行此操作,然后关闭套接字并且您的服务器端代码不再执行。

您必须在客户端使用 Javascript 函数来实现此逻辑。

您是否尝试在用户执行特定操作之前警告用户是否加载了数据?或者在他们试图离开页面之前?当页面上发生该操作时,您必须使用脚本弹出警报。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    相关资源
    最近更新 更多