2012-09-17 39 views
0

我似乎無法使用我的asp detailsview將數據插入到我的數據庫中,如果我將它放入jquery dialog。不過,只要將它直接放在頁面內,它就可以正常工作。無法使用detailsview在jQuery對話框中插入數據

當我把它的對話裏我仍然可以填寫信息,但是當我提交SQL服務器抱怨使用像這樣NULL值:

Cannot insert the value NULL into column 'Alias', table 'GSSNetDB.dbo.GSSNet_EndUsers'; column does not allow nulls 

所以看似回傳功能不能出於某種原因從對話框中的HTML表單中讀取信息。

我創建使用此對話框:使用

<div id="dialogEndUser" title="Create new user"> 
    <asp:DetailsView 
     ID="DetailsView_EndUsers" 
     runat="server" 
     Caption="Enter new user details" 
     Visible="True" 

     AutoGenerateInsertButton="True" 
     AutoGenerateRows="False" 

     DataKeyNames="Alias" 
     DataSourceID="EndUserSource" 
     DefaultMode="Insert"> 
     <Fields> 
      <asp:BoundField DataField="Alias" HeaderText="Alias" ReadOnly="True" SortExpression="Alias" /> 
      <asp:BoundField DataField="Address" HeaderText="Address*" SortExpression="Address" /> 
      <asp:BoundField DataField="Name" HeaderText="Name*" SortExpression="Name" /> 
      <asp:BoundField DataField="Device_Key" HeaderText="Device Key" SortExpression="Device_Key" /> 
      <asp:BoundField DataField="Phone_Number" HeaderText="Phone_Number" SortExpression="Phone_Number" /> 
      <asp:BoundField DataField="E_mail" HeaderText="E-mail" SortExpression="E_mail" /> 
      <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" /> 
     </Fields> 
    </asp:DetailsView> 
</div> 

和實際彈出:

$(function() { 
    $("#dialogEndUser").dialog({ 
    height: 350, 
    width: 300, 
    position: "top", 
    modal: false, 
    autoOpen: false 
    }); 
}); 

數據源如下所示:

<asp:SqlDataSource ID="EndUserSource" runat="server" 
    ConnectionString="<%$ ConnectionStrings:GSSNetDB %>" 
    InsertCommand="INSERT INTO [Users] ([Alias], [Address], [Device_Key], [Name], [Phone_Number], [E_mail], [Description]) VALUES (@Alias, @Address, @Device_Key, @Name, @Phone_Number, @E_mail, @Description)"> 
    <InsertParameters> 
    <asp:Parameter Name="Alias" Type="String" /> 
    <asp:Parameter Name="Address" Type="String" /> 
    <asp:Parameter Name="Device_Key" Type="String" /> 
    <asp:Parameter Name="Name" Type="String" /> 
    <asp:Parameter Name="Phone_Number" Type="String" /> 
    <asp:Parameter Name="E_mail" Type="String" /> 
    <asp:Parameter Name="Description" Type="String" /> 
    </InsertParameters> 
</asp:SqlDataSource> 

我會非常感謝如果有人能幫我解決問題,或者提供關於如何解決問題的任何指示。也許嘗試使用不同的對話系統,如果有人有建議?

謝謝你的時間!

+0

我在它周圍工作,而不是使用不同的對話框窗口,而不是它的工作原理。還是一個奇怪的問題。 – ChewToy

回答

1

我認爲,雖然你確實設置了dataKeyName="Alias",但是當你將這個boundField設置爲ReadOnly="True"時,你的insertCommand參數沒有值。

InsertCommand="INSERT INTO [Users] (
      [Alias], [Address], [Device_Key], [Name], [Phone_Number], [E_mail], [Description]) 
    VALUES (@Alias, @Address, @Device_Key, @Name, @Phone_Number, @E_mail, @Description)" 

能否請您確認@Alias上了車插入值?(例如:使用SqlDataSource和調試的插入事件/收看e.Command.Parameters["@Alias"]

在你寫的,這是另一方面做工精細如果你把jQuery的對話框這使我想知道外面的DetailsView控件? !我是否缺少點什麼?歡迎任何評論/反饋!

+0

別名在插入時確實沒有得到值。這導致我相信jquery以某種方式混淆了回發函數。不過,我不太清楚如何解決它。我也再次測試以確保,當我使用jquery對話框之外的控件時,它確實有效,這很奇怪。哦,我試圖刪除只讀屬性,它仍然採用相同的方式。 – ChewToy

0

問題是jQuery在FORM元素之外創建浮動DIV元素並將DetailView表移動到這些div中,所以值不包含在回發中,你可以通過創建一個文本框來測試10在表單外的頁面上,並觀察它在回發後不會返回值。在對話框可見的情況下,您可以通過使用瀏覽器的開發人員工具檢查頁面來查看錶單元素之外的div元素。

我不確定我會如何解決這個問題呢。我的第一個想法是在對話框關閉之前,使用JavaScript在DetailsView表格的輸入中更新其值,並在表單中隱藏字段;儘管這會消除DetailsView控制的有用性。這可能比這更簡單,因爲我希望有一個簡單的方法可以告訴jQuery在表單元素中構建它的對話框div。我會研究一下jQuery修復,如果我找到任何東西,我會再次發佈。

相關問題