2010-12-02 37 views
1

我在網上搜索,但沒有發現這個問題,一個真正的好答案..ASP.NET:另一頁上顯示通知,成功地保存數據後,數據庫

比方說,我有一個表格,對AddToList .aspx,並且我希望在您點擊發送後,它將引導您回到List.aspx,並在消息框div中顯示消息「該項目已添加到列表」。

我需要發送List.aspx?msg =我的消息,還是有另一種好辦法嗎?

編輯:

所以我做了這個輔助類:

public class MessageHelper : System.Web.UI.MasterPage 
    { 
     public void SetMessage(String message) 
     { 
      Session["Message"] = message; 
     } 

     public string GetMessage() 
     { 
      if (String.IsNullOrEmpty(Session["Message"])) 
      { 
       String temp = Session["Message"]; 
       Session["Message"] = ""; 
       return temp; 
      } 
      else 
      { 
       return ""; 
      } 
     } 
    } 

,並得到這個錯誤:

Error 32 The best overloaded method match for 'string.IsNullOrEmpty(string)' has some invalid arguments 
Error 33 Argument '1': cannot convert from 'object' to 'string' 
Error 34 Cannot implicitly convert type 'object' to 'string'. An explicit conversion exists (are you missing a cast?) 
+0

納豆 - 嘗試下次不要更改你的問題。你完全改變了意思,導致答案在很大程度上與新編輯的問題無關。你應該爲你的鑄造錯誤打開另一個問題。謝謝! – 2010-12-03 17:50:48

回答

0

您當然可以使用查詢字符串將數據傳遞到您的List.aspx頁面,但要謹慎傳遞您計劃在HTML中寫出的文本 - 您需要防範XSS攻擊。

還有其他幾種方法可以做到這一點。機會是,你將在你的應用程序中有幾個地方想要將用戶重定向到另一個頁面,但也會顯示一條與他們在前一頁上所做的事情有關的消息(保存項目,刪除物品等)。爲這個問題提出更多的全球計劃會更好,而不是僅僅爲了這個特定的實例。

一個想法是使用會話存儲消息,然後做你的重定向。

Session("Message") = "Item was added to list." 
Response.Redirect("List.aspx") 

然後,在您的網頁(或母版頁,也許),你檢查Session("Message"),如果它得到的東西,你顯示的信息給用戶,然後清除該變量。

If Session("Message") IsNot Nothing Then 
    Response.Write(CType(Session("Message"), String)) 'or set a label text, or show a pop up div, or whatever' 
    Session("Message") = Nothing 
End If 

如果使用這種方法,我建議你寫一個輔助類,只是用它來管理您的信息:

MessageHelper.SetMessage("Item added to list.") 

MessageHelper.GetMessage() 

將這些方法你需要。

+0

好的,謝謝!但我得到了一些錯誤,看看我編輯了什麼。 – natiz 2010-12-03 00:14:01

+0

好吧,我編輯過 - 只需檢查Nothing而不是使用String.IsNullOrEmpty()。 – 2010-12-03 04:15:51

0

我相信你可以通過設置按鈕的使用的一項PostBackUrl做將數據保存到「List.aspx」。也許在AddToList.aspx上設置一個變量爲true/false,然後從List.aspx中訪問它?

不知道它是否更好,但它是一個選項。

1

您需要轉換爲字符串。會話參數存儲爲對象。

也可以將其作爲擴展方法來實現。這樣它將可用於所有頁面類型(Master和UI)

public static class MessageHelper 
    { 
     public static void SetMessage(this Page page, String message) 
     { 
      Session["Message"] = message; 
     } 

     public static string GetMessage(this Page page) 
     { 
      var messageText = Session["Message"] as string; 
      if (!String.IsNullOrEmpty(messageText)) 
      { 
       Session["Message"] = ""; 
       return messageText; 
      } 
      return ""; 
     } 
    } 
+0

我想你錯過了! - 應該是「if(!String.IsNullOrEmpty(messageText))」 – 2010-12-03 04:14:03

0

我還沒有評論,或者我剛剛評論過您的帖子。你需要像這樣強制轉換你的會話變量:(string)Session [「Message」]。所以,代碼應該是這樣的:

public class MessageHelper : System.Web.UI.MasterPage 
{ 
    public void SetMessage(String message) 
    { 
     Session["Message"] = message; 
    } 

    public string GetMessage() 
    { 
     if (String.IsNullOrEmpty((string)Session["Message"])) 
     { 
      String temp = (string)Session["Message"]; 
      Session["Message"] = ""; 
      return temp; 
     } 
     else 
     { 
      return ""; 
     } 
    } 
} 

其實有寫這個類的一個更好的辦法:讓一個屬性,而不是兩種方法。它應該是這樣的:(我也是固定的邏輯; GetMessage函數總返回空白)

public class MessageHelper : System.Web.UI.MasterPage 
{ 
    public MessageHelper() 
    { 

    } 

    public string Message 
    { 
     set { Session["Message"] = value; } 
     get 
     { 
      if (String.IsNullOrEmpty((string)Session["Message"])) 
      { 
       Session["Message"] = ""; 
      } 
      return (string)Session["Message"]; 
     } 
    } 
} 

在你的兩個相應的文件,你會設置和獲取它像這樣:

//in AddToList.aspx 
MessageHelper msg = new MessageHelper(); 
msg.Message = "The Item was added to your list."; 

//and in List.aspx, assigned to an arbitrary Label named myMessageLabel 
MessageHelper msg = new MessageHelper(); 
myMessageLabel.Text = msg.Message; 
相關問題