2015年11月26日 星期四

[EEP]Srvtools.WebDataSource元件Master發生錯誤,無法找到欄位:XXX的值

有些欄位作為Index, 又不想讓使用者看到時, 有很多種作法
像是用「System.Data.*」操作或是ViewState等狀態管理

這篇介紹兩個簡單的方法,各有其特色




  • HiddenField:還想利用JQuery或在Client端對其有動態影響時
  • Visible=False:Client看不到, 一定要PostBack
習慣用VS編寫的話,通常會直覺的利用Visible=False
但有可能導致使用者在操作WebFormView時出現
Srvtools.WebDataSource元件Master發生錯誤,無法找到欄位:XXX的值

這時先檢查一下該控制項的Bind設定
(錯誤)  <asp:Label ID="Label1" runat="server" Text='<%# Eval("CustID") %>'  Visible="False"></asp:Label>
(正確)  <asp:Label ID="Label1" runat="server" Text='<%# Bind("CustID") %>'  Visible="False"></asp:Label>

如果連這樣都無法解決,對於該欄位又沒有資安考量時,可以考慮使用HiddenField
HiddenField是VS內建的控制項

將其插入ItemTemplate的樣板(或其他有需求的樣板模式)
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Bind("CustID") %>' />

由於該程式碼經編譯後,在Client端看的到
會轉換成「<input type="hidden" name="WebFormView1$HiddenField1" id="WebFormView1_HiddenField1" value="1">
與利用JQuery的hide();有相同的缺點,如果是資安考量的欄位,請勿直接使用「HiddenField」

沒有留言:

張貼留言