こんにちは。
次のようなフィールドを持つ単純なグリッドビューがあります。
<asp:TemplateField HeaderText="USD Full Load Machine">
<ItemTemplate>
<asp:Label ID="lblUSDFullLoad" runat="server" Text='<%# Bind("USDFullyLoadMachine") %>' />
</ItemTemplate>
</asp:TemplateField>
InsertCommand と Insertparameters は次のように設定されます。
<asp:SqlDataSource (code omitted)
InsertCommand="Insert Into [xxxxTable]
([SubmissionID],USDFullyLoadMachine]) Values(@newSubID,@usdflm)">
<InsertParameters>
<asp:ControlParameter Name="newSubID" ControlID="lblNewSubmissionID" />
<asp:ControlParameter Name="usdflm" ControlID="gridConversionTotals$ctl02$lblUSDFullLoad" />
</InsertParameters>
</asp:SqlDataSource>
クライアント側の JavaScript を使用して gridConversionTotals$ctl02$lblUSDFullLoad ラベルのテキストを変更し、コード ビハインドで SQL データソース コントロールに対して挿入メソッドを実行すると、SQL に送信される値はラベルの新しい値ではありません。ブラウザに表示される値は、ラベルが最後にデータバインドされたときの値です。
これは、サーバーが挿入コマンドを実行したときに、クライアントが何を表示しているのかを認識できないためだと最初は考えていましたが、ラベルをテキストボックスに変更してすべてのコードをそのままにしておくと、データベースに送信される値は、クライアントに表示される値です。
この場合、挿入メソッドがラベルとテキストボックスのクライアント側のコンテンツを異なる方法で処理する理由を誰かが説明できますか?
そして、これは一般的に、クライアント側で値を変更してデータベースに送信したい場合、常にテキストボックスを使用する必要があるということですか?
ありがとうございました。