2009-06-30 64 views
0

我有一個ASP.NET應用程序,我正在處理。此應用程序的一個要求是不使用查詢字符串參數。之所以這樣,是因爲客戶覺得它看起來髒兮兮,不專業。另外,會話變量也不能使用。爲了克服這些挑戰,我決定在runat =「server」中使用隱藏的html元素。ASP.NET - 參數的隱藏字段

挑戰是,頁面被重定向到自己。原因是該頁面在10頁的列表中表示一個模板。如果用戶點擊「下一步」,則應用程序需要更新第二頁的信息。如果用戶點擊「Previous」,則需要發生相反的情況。

如何讀取/設置一個隱藏的HTML字段,以便我可以訪問後續頁面請求所需的值?

謝謝!

回答

4

這是ViewState屬性的作用。它爲你持續往返。

+1

這是最好的解決方案,除非您需要訪問JavaScript中的值... – tekBlues 2009-06-30 23:03:28

0

從我在這裏讀到的少量信息中,我猜測巫師控制可能適合你?

除此之外,你可以使用Cross Page Postback。它工作時沒有查詢字符串或會話。

2

與文本輸入一樣,您可以訪問隱藏輸入的value屬性。

hiddenFieldPage.Value = "2"; // page 2! 
if (hiddenFieldPage.Value == "2") 
    // show page 2! 

您可能需要包含System.Web.UI.HtmlControls。或者,我似乎記得一個asp:hidden控件,它基本上是WebControls命名空間中隱藏輸入的包裝。

1

ASP.NET使用LosFormatter class來序列化視圖狀態。本質上,你正在做類似的事情。只需將所需的數據存儲在對象中,並將其序列化爲隱藏的表單字段。使用Request.Form["..."]將值返回並反序列化。

+0

我使用同樣的方法。這對於具有客戶端功能的RIA最有效 – 2009-07-01 01:59:51

2

使用視圖狀態,是對你的情況最好的選擇:

// Storing a student in view state. 
Student stud = new Student("John", "Doe"); 
ViewState["CurrentStudent"] = stud; 

// Retrieve a student from view state 
Student stud = (Student) ViewState["CurrentStudent"]; 

所有你需要注意的是,你的類必須是可序列化存儲在視圖狀態。

This is a nice tutorial to help you through.

0

如果你有

<asp:HiddenField ID="ObjectID" runat="server" /> 

然後

<asp:ControlParameter ControlID="ObjectID" Name="Parameter's name" PropertyName="Value" Type="Int32" /> 
+0

不是。在ControlParameter'###'中找不到控件'####'。 – Fandango68 2016-05-30 04:44:18