0

jquery dialog内にデータを配置すると、asp detailsview を使用してデータベースにデータを挿入できないようです。ただし、ページ内に直接配置する限り、正常に機能します。

ダイアログ内に配置すると、情報を入力できますが、送信すると、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>

誰かが私を助けてくれたり、問題へのアプローチ方法についての指針を与えてくれたりすると、とてもありがたいです。誰かが推奨事項を持っている場合は、別のダイアログ システムを使用してみてください。

御時間ありがとうございます!

4

2 に答える 2

1

dataKeyName="Alias"設定しましたが、このboundFieldをに設定したため、insertCommand内のパラメーターには値がないと思いますReadOnly="True"

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 の Inserting Event と debug/watch を使用しe.Command.Parameters["@Alias"] ます。

一方、detailsView を jQuery ダイアログの外に配置すると、正常に動作 すると書いてありましたが、不思議に思います。何か不足していますか?コメント/フィードバックは大歓迎です!

于 2012-09-17T15:09:51.350 に答える
0

問題は、jQuery が FORM 要素の外側にフローティング DIV 要素を作成し、DetailView テーブルをこれらの div に移動することです。そのため、値はポストバックに含まれません。フォームの外側のページにテキストボックスを作成してこれをテストしinput(runat=server)、ポストバック後に値が返されないことを確認できます。ダイアログが表示されている間にブラウザーの開発者ツールを使用してページを調べると、フォーム要素の外側にある div 要素を確認できます。

これをどのように修正するかはまだわかりません。私の最初のアイデアは、ダイアログが閉じる前に、JavaScript を使用して DetailsView テーブルの入力から値が更新されるフォーム内の隠しフィールドを持つことです。ただし、これによりDetailsViewコントロールの有用性が失われます。これよりも簡単かもしれませんが、フォーム要素内にダイアログ div を構築するよう jQuery に指示する簡単な方法があることを願っています。jQuery の修正を少し調べて、何か見つかったら再度投稿します。

于 2013-11-07T16:21:00.030 に答える