在儀表板頁面上,我動態加載了幾個控件;控件總是需要加載,所以沒有if (!Page.IsPostBack)
代碼。但問題在於,在代碼隱藏方面,我們使用Request.Form.GetValues
,並且特定的下拉字段值始終爲空(大概是因爲控件正在清除並在回發中重新加載),並且這會在頁面中稍後觸發錯誤這預示着這個下拉列表中的一個值。我必須使用Request.Form.GetValues,因爲頁面可以通過Javascript動態添加行(每行包含5個HTML輸入)。動態加載控件和回發
如果我檢查回發,則控件的按鈕事件根本不會觸發,而是重新加載儀表板頁面,並且根本沒有加載控件(即頁面爲空白)。
我該如何解決這個問題?我需要隨時動態加載控件,但我也需要通過Request.Form.GetValues檢索值。有什麼建議麼?
編輯
下面的代碼是什麼樣子,大致爲:
(客戶端HTML)
<table>
<tr>
<td align="center">
<select id="Class1" class="txtboxcomm" name="Class1" runat="server" />
<a href="javascript:classFinder('1')"> Look Up</a>
</td>
</tr>
</table>
<div id="action">
<asp:LinkButton ID="ibtnGetQuote" runat="server" OnClick="ibtnGetQuote_Click" CssClass="getQuote" AccessKey="G">Get Quote</asp:LinkButton>
</div>
(服務器端,在ibtnGetQuote_Click
- 這其實是一個循環因爲用戶可以追加多行;「我」被追加到單詞「類」以找到確切的行)
IList<string> classes = this.GetFormValues("Class1");
// This will return null all the time...
private IList<string> GetFormValues(string clientID)
{
String[] values;
values = Request.Form.GetValues(clientID);
if (values == null)
{
Control ctl = FindControl(clientID); // uses built-in FindControl method
values = Request.Form.GetValues(ctl.ClientID);
}
return values;
}
原始代碼硬編碼「ctl00 $ xx $ xx」的東西,但控件可能會或可能不會被加載,所以我們無法保證控件的名稱。事實上,我甚至不確定這是否適用於所有情況,因爲只有FIRST控件是服務器控件,其餘的只是標準的HTML控件,因此不會有「ClientID」。
您的措辭給人的印象只有許多控制之一是有這個問題。這是正確的,還是都是動態控制遇到這種行爲? – 2011-03-18 19:13:38
就空值而言,它只是在客戶端附加行的控件上,因爲第一行是實際的服務器控件(即具有ASP.NET ctl00_ $ Stuff_ $ Stuff類型命名)和Request.Form .GetValues爲該控件返回null。 – 2011-03-18 19:21:50