2009-01-21 147 views
0

在.NET(特別是C#)中,如何停止導航?以編程方式停止導航

情況:用戶點擊了一個鏈接並觸發_Click()事件。

點擊事件觸發保存方法,該方法驗證一些信息。如果有任何信息不符合要求,我們希望停止發生其他點擊事件。

ASP.NET的內置驗證在這種情況下不起作用。根據數據的初始狀態,可能需要填寫表單的多種不同方式(表單由多個不同控件構建,每個控件都用於多個頁面)。例如,如果他們第一次打這個表格(他們以前從未添加過任何信息),則不需要任何東西......但是如果他們填寫任何內容,他們必須填寫(幾乎)所有內容。

有了驗證中的這個條件邏輯,只需在頁面上粘貼(空)標籤並在需要時填充驗證消息就比使用實際驗證器更容易。

我們的問題是,啓動Save()的方法會將用戶移動到另一個頁面。

沒有可用於指定「停止導航」的返回值...因此,如何啓動方法,設置「錯誤」標籤,然後阻止呼叫返回堆棧(併發送用戶離開頁面)?

回答

1

雖然您可以使用CustomValidator,並處理ServerValidate事件以執行此自定義驗證?

通過調用Response.End()可以結束HTTP請求。 也聽起來像你應該能夠防止重定向操作執行,如果頁面無效。

1

Response.End();

聽起來像你有一些意大利麪條邏輯去那裏。你想打破你的驗證出一個方法,如果它返回false,停止處理保存等。

我希望你的代碼看起來像這樣;

if (Validation()) 
{ 
    if (DoSaveFunction()) 
    { 
     Response.Redirect("theNextPage.aspx"); 
    } 
    else 
    { 
     lblWarning.Text = "Something went wrong saving the file"; 
    } 
} 
else 
{ 
    lblWarning.Text = "Invalid inputs"; 
} 
+0

它會,但我們不完全在做頁面導航。我們有一系列控制託管在一個頁面中,並且按鈕在它們之間導航。我們必須保存一個控件,關閉它,然後打開下一個控件。複雜性是因爲點擊由頁面處理,並由控件保存。 – Jeff 2009-01-21 16:40:15

+0

@Ian:在UpdatePanels中使用Response.End()是否有任何複雜性? – Jeff 2009-01-21 16:50:19