我在每個頁面上都有一個搜索表單,因此我把它放在master頁面上。在添加了runat=server
之後,我現在無法使用其他形式的runat服務器;)asp.net表單runat服務器
人們通常會如何避免這種情況?
一個想法是用一個表格runat=server
包圍整個頁面,但是我必須在主頁面中包含代碼,即使對於僅在一個子頁面上使用的表單(例如contact),也是如此。
怎樣的人通常在這得到什麼?
日Thnx
我在每個頁面上都有一個搜索表單,因此我把它放在master頁面上。在添加了runat=server
之後,我現在無法使用其他形式的runat服務器;)asp.net表單runat服務器
人們通常會如何避免這種情況?
一個想法是用一個表格runat=server
包圍整個頁面,但是我必須在主頁面中包含代碼,即使對於僅在一個子頁面上使用的表單(例如contact),也是如此。
怎樣的人通常在這得到什麼?
日Thnx
這通常被認爲是對ASP.NET最有問題的設計決策之一。這是一個可悲的事情,你有點固定這種每頁一頁的原則。
你可能想要有多種形式的一個原因是默認按鈕將被瀏覽器設置爲提交按鈕。有人在您的搜索框中輸入內容並按回車鍵不應提交主窗體(假設這是登錄頁面),而是提交搜索按鈕的小形式。
最簡單的和「標準」的方式來解決,這是使用ASP:面板和設置DefaultButton屬性。這應該包括包含搜索字段和搜索按鈕的部分。
不要擔心從主頁面內部編碼<form>
,圍繞整個頁面。這是一個常見的設計。大多數服務器控件都需要一個表單,所以爲什麼不簡單地包含它呢:它應該在那裏。
第一個問題是,爲什麼你想有多個RUNAT = 「服務器」 的形式?
您仍然可以在頁面上使用沒有runat="server"
的窗體,或者使用Button
控件上的PostBackUrl
屬性來發布到不同的ASP.NET頁面。
要在一個多步驟的過程中收集的數據,你可以看一下ASP.NET嚮導控制,參見Scott Guthrie的blog post here。
或者你可以管理它自己所有並使用ASP.NET面板,或者使用已經提到PostBackUrl
從ASP.NET頁面導航到不同的頁面。
我建議你有搜索HTML表格W母版頁上/ O = RUNAT服務器,像
<form action="Search.aspx" method="get">
<input type="text" name="q" /><input type="submit" />
</form>
使用方法=獲取有可能採取的搜索URL。然後做任何你在Search.aspx的代碼隱藏需要與查詢:
public void Page_Load(object sender)
{
string q = Context.Request.QueryString["q"];
/*...*/
}
我明白了。我只是認爲編寫母版頁上一頁的表單是錯誤的。某種程度上不適合我:P,但正如你所說這是常見的設計,也許我應該。日Thnx。 – b0x0rz
在ASP.NET的開始,人們經常不理解MS爲什麼選擇這種每頁只有一個和一個表單的設計。它具有優點(簡單性有利於複雜性)和缺點(某些傳統方法需要重新考慮)。還有一些解決方法,但總括來說,我的建議是:堅持這個設計並使用它的功能,並且只有當你確實需要並且完全理解它的後果時纔開始構建「非默認」設計模式。 – Abel