ASP.NET 母版頁和內容頁中的表單元素
好的,我目前項目中的另一個障礙。
我的母版頁和內容頁中都沒有表單元素,我傾向於在內容中包含相關的所有表單。
然而,在目前項目中,我們有一個他們想要兩者的頁面。右上角的登錄表單和內容中的問題表單。
在嘗試解決這個問題後,我遇到了 ASP.NET 抱怨母版頁中需要單個表單元素的問題。TBH,我真的不明白為什麼這是 ASP.NET 的要求,但是嘿嘿。
有誰知道我是否/如何讓首頁面和內容頁麵包含獨立工作的表單元素?
如果沒有,您能否就如何繼續獲得所需的外觀/功能提供建議?
我想我會回顧一下我的一些懸而未決的問題,看看我是否可以關閉其中一些。
這個很有趣。我完全不相信在 ASP.NET 頁面上只能有一個表單。這對我來說毫無意義。我已經看到很多網頁在網頁上有多個表單,為什麼 ASP.NET 頁面應該有所不同?
所以,它讓我思考。
為什麼 ASP.NET 頁面需要表單元素?
ASP.NET 頁面嘗試通過 PostBack 模型提供狀態持久性來模擬 WinForms 環境。這為無狀態環境提供了狀態元素。為了做到這一點,執行時需要能夠在每個“表單”中保持這種狀態。它通過將數據回發給自己來做到這一點。需要注意的是:
- PostBack 並沒有什麼花哨的地方。
- 它使用來自任何其他堆棧的 HTTP 表單和 POST,與任何其他表單相同。
- 只是因為它看起來可能正在做一些特別的事情,但實際上並非如此,所發生的一切只是 POST 返回一些有關導致它的原因的資訊,因此您可以在伺服器端程式碼中執行諸如處理客戶端事件之類的事情。
那為什麼只有一個?
這對我來說是百萬英鎊的問題(我是英國人)。我知道 ASP.NET 需要這個,特別是如果您使用 ASP.NET 伺服器控制項,但為什麼我不能自己製作附加表單?
所以,我想搞砸了,只是製作你自己的表格!
我做到了。我添加了一個沼澤標準的簡單表單,送出操作為“#”。然後,這將對目前頁面執行 POST,其中包含請求中給定表單的表單數據。
你猜怎麼了?一切都很好。所以我最終得到:
- 一個母版頁,其中包含一個 HTML 表單
- 此表單回傳到目前頁面(基本上是使用首頁面的頁面)。
- 在主伺服器的 Page_Load 程式碼隱藏中,然後我添加了程式碼來檢查請求以查看請求中傳遞了哪些數據。如果它包含數據(比如隱藏欄位),那麼我知道文章來自母版頁上的表單,如果不是,那麼它很可能是來自內容的 PostBack,可以忽略。
- 然後我用標籤包圍了內容
<form runat="server" id="aspNetForm"...> </form>標籤。這意味著所有內容頁面都會自動擁有一個可以使用的表單。這為我的問題提供了一個相對簡單、乾淨的解決方案。我的登錄表單與創建的所有內容表單一起工作得很好,其中一些是複雜的表單,其他的使用大量的伺服器控制項和許多 PostBacks,等等。
我希望這對其他人有幫助。