請教各位先進:
我在ASP.NET測試了一些方法,想要把值POST過去另一個頁面,可以到了另一個頁面卻都取不到值,不知道有沒有範例可以參考實做呢?
輸出結果:
asp:TextBox:TextBox
asp:HiddenField1沒預設值:
asp:HiddenField2有預設值:HF2
HiddenField在有預設值的狀況下是可以POST過去
若沒有值,或是由behind code去動態修改HiddenField的值後,POST過去就取不到值了,不知道為什麼,或是有什麼其它寫法可以把值動態的POST過去的呢?
研究了好久都測不出來,拜託各位指教了。謝謝
應該是POST不能用HIDDENFIELD
請改用TEXTBOX 然後在STYLE中HIDDEN就好
不需要把hiddenfield換成textbox,因為隱藏欄位本來就會被submit出去的...
你要做的是...
1.post3.aspx上加上這麼一行程式...
<pre class="c" name="code"><%@ Reference Page="~/Post2.aspx" %>
2.這一行程式改成這樣....
<pre class="c" name="code">Server.Transfer("./post2.aspx",true);
3.post2.aspx.cs就可以這麼寫....
<pre class="c" name="code">Response.Write("asp:HiddenField1:" + ((HiddenField)((post3)Context.Handler).FindControl("HF1")).Value;
只是我有個小問題....post2...post3...不能給點有意義的名字嗎?
如果不想這麼麻煩....
那麼...post2這麼寫....
<pre class="c" name="code">
Response.Write("asp:HiddenField1:" + ((HiddenField)Page.PreviousPage.FindControl("HF1")).Value);
您好:
謝謝您的回答!
1.因為只是在測試post的功能而已,所以檔案就隨便命名了,如果測試成功再把它用到正式環境,造成混亂,不好意思。
2.我不是要把hiddenfield換成textbox,只是在測試看什麼東西可以post過去,什麼東西不行,所以用了hiddenfield和textbox來看有沒有差別,測試結果是只能傳預設值過去,如果後端Code改值後,傳過去的值也是預設值,而不是動態改過的值,不知道是不是因為asp.net的運作流程有關係,導致在修改值之前頁面就已經post過去了,或其它什麼原因?真的不太清楚!
3.我post3和post2改成了您說的語法後,在post2出現了下圖的錯誤訊息,不知道是少了什麼東西?
...
第一...post2請改成你自己的Post2那個class名稱
第二...對於C#來說,大小寫是有分別的,HiddenField有Value屬性,但是沒有value屬性
您好:
非常謝謝您的解答,使用以下寫法已可以正常post,而且也可以取得code behind修正後的值了!
Response.Write("asp:HiddenField1:" + ((HiddenField)Page.PreviousPage.FindControl("HF1")).Value);
另外想再請教個笨問題:
關於第一種的寫法
Response.Write("asp:HiddenField1:" + ((HiddenField)((post3)Context.Handler).FindControl("HF1")).Value;
我的post3.cs的class名稱為如下圖是Video_post3
在post2要引用post3的方法error如下圖:
那我在post2.cs裡要如何引入post3.cs的class來取得post3裡的方法和變數呢?
我使用using Video_post3;這個也不行
不知道要如何引用其它頁面.aspx的class
一般我都是在App_Code裡建一個xxx.cs的class,再為class命名namespace來using,但要如何使用.aspx的class就不知道如何引用了。
謝謝你的指教,獲益良多,謝謝。
<pre class="c" name="code">
<pre class="c" name="code"><%@ Reference Page="~/Post2.aspx" %>
外獅佬好厲害
不愧是明教備用教主..
為啥是『備用』的啊?
陽頂天都葛屁這麼久了
您好:
我在post3.aspx有加
<%@ Reference Page="~/post2.aspx" %>
另外在post2.aspx也有加了,去測試,還是error
<%@ Reference Page="~/post3.aspx" %>
所以意思是只要在post3.aspx加了這一行<%@ Reference Page="~/post2.aspx" %>,那麼在post2.cs就可以直接取用Video_post3 Class裡面的function和變數嗎?
還是還有什麼地方少加了呢?因為我都有加Reference了,不過還是測不出來。
leo226提到:
直接取用Video_post3 Class裡面的function和變數
為什麼要這麼做??
Server.Transfer只是讓網頁之間可以傳遞資料而已,並不是用來做『程式共用』的哦
如果你需要這樣的功能,應該把這些需要共用的程式碼,寫成獨立的class。
另外,server.transfer只能把前一個頁面的form欄位資料帶到下一個頁面。
至於那些個什麼function、變數,忘了它吧。
最後,看到你最後po上來那張錯誤圖
想必應該是你的code根本不認識Video_post3這個類別,嘗試把完整的namespace加上去試試。
再強調一次...Video_post3這個類別,是一個Page。
預設的情況下,那些個事件處理常式、表單欄位server control,都是protected。
看樣子,您該去找本asp.net的書研讀一番了
因為我看到這篇最下面Server.Transfer的Code寫法,感覺好像差不多:
http://blog.csdn.net/keymo_/article/details/7895450
======================
//create instance of source web form
WebForm1 wf1;
//get reference to current handler instance
wf1=(WebForm1)Context.Handler;
Label1.Text=wf1.Name;
Label2.Text=wf1.EMail;
======================
您的是用Context.Handler去FindControl
它的是用Context.Handler去找function和get參數
所以才會誤解,我會忘了他的,謝謝。
我現在的問題是不知道如何讓post2去認識Video_post3這個類別。
我也有試著在post3加入namespace,但加入了namespace後,裡面的控制項就都報錯了,錯誤說明控制項不在內容中,如下圖。
所以不知道是不是我加入namespace的寫法有錯誤嗎?我沒在Code Behind中寫入過namespace,只有在App_Code自訂的類別有加入過,同樣的寫法好像不能通用。
不知道寫法是不是如下呢?
檔案post3.cs
namespace postTest
{
public partial class Video_post3 : System.Web.UI.Page
{
}
}
檔案post2.cs
using postTest;
現在是post3加入namespace後,所有控制項就都報錯了,真的不知道問題出在那裡,我只想要確認我的寫法有沒有錯,若沒錯,再找看看是不是有其它問題所造成。
謝謝您的指教,感激不盡!
....每一個page預設的namespace就是『專案名稱』.『子目錄名稱』...
說真的,我已經不太懂發問者現在的問題到底是什麼了
建議你,去找本C#的書,從基礎打好比較要緊哦
嗯,不好意思,造成困擾了,我只是想要把您教的第一種寫法也做出來而已,如您說的要加namespace、要把post3改為類別名稱Video_post3,但持續引發其它非本文的問題,所以造成混亂了,不好意思!
Response.Write("asp:HiddenField1:" + ((HiddenField)((post3)Context.Handler).FindControl("HF1")).Value;
我有看過一些入門或進階的書,可是印象中沒有教到這些東西,我會再去進修的,不知有無推廌好用的參考書?
謝謝指教。
好問題...請教mislab2000老師吧
啊..好吧我錯了
...是mis2000lab老師
wiselou提到:
為啥是『備用』的啊?
陽頂天都葛屁這麼久了
不要忘了有張無忌...
不過先等老鷹有外孫
先想怎麼弄出個女兒比較要緊吧