2016-11-08 29 views
-1

是否有任何命名約定或按鈕被命名爲「submit」的限制?我有一個autopostback = true和一個按鈕的下拉列表。它應該自動從數據庫asp.net controlid name的錯誤

<asp:DropDownList ID="d1" runat="server" DataSourceID="SqlDataSource1" DataTextField="scode" DataValueField="scode" OnSelectedIndexChanged="d1_SelectedIndexChanged" AppendDataBoundItems="true" AutoPostBack="true"> 
     <asp:ListItem Selected="True">0</asp:ListItem> 
    </asp:DropDownList> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\database.mdf;Integrated Security=True" ProviderName="System.Data.SqlClient" SelectCommand="SELECT [scode] FROM [warehouse]"></asp:SqlDataSource> 
    <asp:TextBox ID="t1" runat="server"></asp:TextBox> 
    <asp:Button ID="submit" runat="server" Text="Button" /> 

codebehind: 
protected void d1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Response.Write("hello"); 
     t1.Text = "abcd"; 
    } 

生成的數據文本框我的問題是,當我把我的按鈕的控件ID爲「提交」的回傳和事件從下拉列表處理不會被觸發,但懸而未決。只有當我點擊「提交」按鈕時纔會觸發回發和事件處理。很確定問題出在按鈕的控制之下,因爲我花了幾個小時的試驗和錯誤來找到解決方法。通過將按鈕的controlid重命名爲「submit1」,並且一切都很完美。簡而言之,當按鈕的controlid被命名爲submit1時,每當我選擇一個項目時,文本框都會自動生成我的數據。同時,如果按鈕的controlid是「submit」,則只有當我點擊按鈕時纔會生成數據。這是一個小問題,因爲我設法找到解決方法,但我想知道爲什麼會發生這種情況。

+0

編輯包括所有的代碼 – user3442192

+0

我之所以添加代碼的原因是爲了表明問題不是來自代碼.. – user3442192

+0

所以我應該刪除所有的代碼,並用一個簡短的視頻或gif代替它,說明問題? – user3442192

回答

0

使用以下代碼minimal代碼我能夠在沒有母版頁的新的Web應用程序項目中重現您的問題。

<asp:DropDownList runat="server" OnSelectedIndexChanged="d1_SelectedIndexChanged" AutoPostBack="true"> 
    <asp:ListItem>0</asp:ListItem> 
    <asp:ListItem>1</asp:ListItem> 
</asp:DropDownList> 
<asp:TextBox ID="ResultLabel" runat="server" /> 
<asp:Button ID="submit" runat="server" Text="Button" /> 

代碼背後

protected void d1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    ResultLabel.Text = "Postback occurred"; 
} 

如果您觀看JavaScript控制檯,當您更改下拉列表選擇時,您會看到它會導致錯誤。

Uncaught TypeError: theForm.submit is not a function

此錯誤來自Web窗體插入到您的頁面以使回發正常工作的代碼位。

該錯誤阻止回發完成。解決方法是不要使用任何ID爲submit的控件。你可能會認爲這是一個錯誤,但改變框架以解決這個問題會使框架比需要的更加複雜。

+0

謝謝你的回答。任何想法爲什麼它在我的其他網頁罰款? – user3442192

+0

@ user3442192檢查客戶端*上的ID *,看看它們是否真的最終成爲'submit'。默認情況下,當控件嵌套在模板或主頁面或用戶控件中時,客戶端上的ID將會不同,從而避免出現問題。請參閱[ClientIDMode](https://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode(v = vs.110).aspx)。 – mason

+0

@ user3442192請注意,在我的最小代碼中,我刪除了任何不必要的東西 - 我對列表項進行了硬編碼,從而消除了SqlDataSource和關聯的數據庫,從而使人們更容易將其放入自己的編輯器並獲得相同的結果。這是你應該在未來努力的最小例子。 – mason

相關問題