在ASP.NET中使用Winforms MessageBox的问题

时间:2010-09-07 19:05:18

标签: c# asp.net messagebox

提交流读取文件时,我显示MessageBox。然而,即使点击好后,盒子仍然会出现。当我按住Enter键以飞过框时,只从文件中添加一个字段。

继承我的代码隐藏

if (FileTypeDDL.SelectedValue == "Calendar Dates" && fileName == "calendar_dates.txt")
{
    //Check if full txt has already been uploaded
    SEPTA_DS.CalendarDatesTBLDataTable GetCalendarDates = (SEPTA_DS.CalendarDatesTBLDataTable)cdta.GetDataByCategory(Convert.ToString(Session["Cat"]));
    var category = Convert.ToString(CategoryDDL.SelectedItem);
    var service_id = Convert.ToString(row["service_id"]);
    var date = Convert.ToString(row["date"]);
    var exception_type = Convert.ToString(row["exception_type"]);
    if (GetCalendarDates.Rows.Count < 1)
    {
        int insertData = Convert.ToInt32(cdta.InsertCalendarDates(category, service_id, date, exception_type));
    }
    else
    {
        DialogResult result = MessageBox.Show("This will overwrite the current list. Are you sure you wish to continue?", "Important Message",
        MessageBoxButtons.YesNo,
        MessageBoxIcon.Exclamation);
        if (result == DialogResult.Yes)
        {
            int updateData = Convert.ToInt32(cdta.UpdateCalendarDates(category, service_id, date, exception_type, Convert.ToInt32(GetCalendarDates.Rows[0]["CalendarID"])));
        }
        else
        {
            Response.Redirect("~/Import.aspx");
        }
    }
}

我只想让框出现一次,然后在'是'上插入数据。为什么以及如何实现这一目标。

编辑:我刚刚意识到此代码在foreach循环内,这就是它重复发生的原因。我的新问题;我如何只显示此MessageBox一次?

3 个答案:

答案 0 :(得分:2)

正如其他人所说,您不希望在ASP.NET页面中使用WinForms MessageBox方法。它“有效”,但正在发生的是服务器上出现消息框。您看到消息框是因为您正在本地开发,但如果此代码被推送到生产站点,则访问者将看不到任何内容 - 页面只会挂起,等待坐在Web服务器上的某人单击“确定”按钮! : - )

要向用户显示消息框,您需要使用客户端脚本。您应该查看两个JavaScript函数:

  • confirm - 显示一个包含Ok和Cancel选项的对话框 - 这是您可能想要的。
  • alert - 显示一个带有单个“确定”按钮的对话框。

我认为你有一个用户点击的按钮开始这个过程。查看使用Button / LinkBut​​ton / ImageButton控件的OnClientClick属性。首先,尝试将其设置为以下内容:

OnClientClick="return confirm('Are you sure you want to do this?');"

当用户单击按钮时,将显示带有“确定/取消”选项的消息框。如果他们单击取消,则消息框返回false并且停止回发。如果他们单击“确定”,则会通过。

现在,您的情况更具挑战性,因为您只想在某些条件成立时显示此信息,即 GetCalendarDates.Rows.Count&gt; = 1 。棘手的部分是你需要在回发之前通过OnClientClick属性设置这个JavaScript。因此,也许在Page_Load中,您可以以编程方式设置按钮的OnClientClick属性,但仅限于感兴趣的条件成立。类似的东西:

void Page_Load(...)
{
    if (GetCalendarDates.Rows.Count >= 1)
        myButton.OnClientClick = "return confirm('...');";
}

我不确定如何或何时设置GetCalendarDates,但是每当设置GetCalendarDates时,最好让上面的逻辑出现。我认为这是一个GridView?如果是这样,请考虑将其添加到GridView的DataBound事件处理程序。

快乐编程!

答案 1 :(得分:0)

选项:

  • 对所有类型的自定义消息框,请考虑是,是全部,否,否。
  • 收集所有必需的数据,并在循环结束时显示一个包含所有数据的消息框。
  • 自定义消息框,其中包含“记住我对会话的操作”

答案 2 :(得分:0)

您使用的是System.Windows.Forms.MessageBox吗?

如果是这样,那么你不能在ASP.Net中使用它,它只适用于Windows会话。 (您将收到未登录的错误)

你问题上的ASP.Net标签是不正确的。