簡體   English   中英

在ASP.NET中使用Winforms MessageBox的問題

[英]Issue Using Winforms MessageBox in ASP.NET

提交流讀取文件時,我有一個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

正如其他人指出的那樣,您不想在ASP.NET頁中使用WinForms MessageBox方法。 它“起作用”,但是正在發生的是消息框出現在服務器上 您看到消息框是因為您是在本地開發的,但是如果將此代碼推送到生產站點,則訪問者將看不到任何內容-該頁面只會掛起,等待坐在Web服務器上的人單擊OK按鈕! :-)

要向用戶顯示消息框,您需要使用客戶端腳本。 您應該研究兩個JavaScript函數:

  • 確認-顯示一個帶有“確定”和“取消”選項的對話框-這可能是您想要的。
  • 警報-顯示一個帶有單個“確定”按鈕的對話框。

我認為您有一個按鈕,用戶單擊該按鈕即可啟動此過程。 查看使用Button / LinkBut​​ton / ImageButton控件的OnClientClick屬性。 首先,嘗試將其設置為如下所示:

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

當用戶單擊按鈕時,這將顯示一個帶有“確定/取消”選項的消息框。 如果單擊取消,則消息框將返回false,並且回發將停止。 如果他們單擊“確定”,它將會通過。

現在,您的情況更具挑戰性,因為您只想在滿足某些條件(即GetCalendarDates.Rows.Count> = 1)的情況下顯示此情況。 棘手的部分是您需要在回發之前通過OnClientClick屬性設置此JavaScript。 因此,也許在Page_Load中,您可以以編程方式設置按鈕的OnClientClick屬性,但前提是需要滿足條件。 就像是:

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

我不確定如何設置或何時設置GetCalendarDates,但是最好在設置GetCalendarDates時讓上述邏輯出現。 我認為這是一個GridView嗎? 如果是這樣,請考慮將其添加到GridView的DataBound事件處理程序中。

快樂編程!

選項:

  • 對所有類型的自定義消息框考慮是,是,否,否。
  • 收集所有必需的數據,並在循環結束時顯示一個包含所有數據的消息框。
  • 一個自定義消息框,帶有“記住我對會話的操作”

您正在使用System.Windows.Forms.MessageBox嗎?

如果是這樣,那么您將無法在ASP.Net中使用它,它僅適用於Windows會話。 (您將收到一個未登錄的錯誤)

您的問題的ASP.Net標記或該標記不正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM