1

下午好。

我有一个简单的gridview,其中包含这样的字段:

<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的值不是标签的新值,即不是浏览器上显示的值,它是标签上次数据绑定时的值。

我最初认为这是因为服务器在执行插入命令时不可能知道客户端显示的内容,但事实并非如此,因为如果我将标签更改为文本框并保留所有代码不变,发送到数据库的值确实是客户端上显示的值。

有人可以解释一下为什么在这种情况下插入方法会以不同的方式处理标签和文本框的客户端内容吗?

这是否意味着通常当我想在客户端更改值然后将它们发送到数据库时,我需要始终使用文本框?

谢谢你。

4

2 回答 2

1

经过进一步研究,我发现这篇文章https://stackoverflow.com/a/10324721/1266732,它解释了标签不会将值发布回网络服务器,因此建议使用文本框并将它们设置为标签以此目的。

于 2013-02-11T16:21:01.433 回答
0

在技​​术层面,表单值是使用<input />元素或 cookie 发送的。如果您的 javascript 没有编辑<input />元素或 cookie(或以某种方式修改 GET URL),那么您的值将不会发送到服务器。

于 2013-02-11T16:19:11.363 回答