为Insert命令读取的标签值不是浏览器中显示的值

时间:2013-02-11 15:59:36

标签: asp.net gridview label

下午好。

我有一个简单的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 datasource控件上执行insert方法时,发送给SQL的值不是标签的新值,即不是浏览器上显示的值,它是标签最后一个数据绑定时的值。

我最初认为这是因为服务器在执行insert命令时无法知道客户端显示的是什么,但事实并非如此,因为如果我将标签更改为文本框并保留所有代码完整,发送到数据库的值确实是客户端上显示的值。

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

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

谢谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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