2009-07-23 179 views
1

我有一個包含幾個項目的中繼器,其中有一個DropDownList和一個按鈕。在Repeater控件中選擇DropDownList項目

此處的目標是將DDL中的項目與選定的中繼器行相關聯。

ASPX代碼:

<asp:Repeater ID="sharedPlansList" runat="server" 
    onitemdatabound="sharedPlansList_ItemDataBound" 
    onitemcommand="sharedPlansList_ItemCommand"> 
    <ItemTemplate> 
     <div> 
      <h1>&middot; <%# Eval("ProductName") %></h1> 
      <div> 
      Associer le domaine : 
      <asp:DropDownList runat="server" ID="domainList" /> 
      <asp:Button ID="associateDomaine" Text="Associer" runat="server" 
       CommandArgument='<%# Container.DataItem %>' /> 
      </div> 
      <div> 
       Domaines : 
       <asp:BulletedList runat="server" ID="sharedPlanDomains" /> 
      </div> 
     </div> 
    </ItemTemplate> 
</asp:Repeater> 

問題:

當我點擊按鈕各一個無效的回發或回調異常(無效的回發或回調參數事件驗證使用配置中啓用時間,我有。或<%@ Page EnableEventValidation =「true」%>在頁面中出於安全目的,此功能驗證回發或回調事件的參數來自最初呈現它們的服務器控件如果數據有效且期望,請使用ClientScriptManager.RegisterForEventValidation方法爲了註冊回發或回調數據進行驗證。 )。但是沒有任何真正奇特的東西,一切似乎都很標準我不會通過JavaScript添加任何東西或控件。

我已經看到了解決方案,您可以將<pages enableEventValidation="false" />放在web.config中,但我不確定這是一個很好的解決方案,因爲我想確保保留asp.net內置的安全模型。

是否存在任何解決方法?

+0

是否該CommandArgument/Name實際上工作?因爲我有類似的東西,我根本無法完成它!完全忽略了命令參數。 – Sebastian 2009-08-31 20:04:23

回答

0

我不能確定沒有測試你的代碼(我沒有時間做這個第二),但是你可以驗證你分配給你的按鈕的動態CommandArgument是罪魁禍首嗎?如果你把它拿出來,錯誤是否繼續被拋出?

如果是這樣的話,你可以嘗試處理每個行的OnItemDataBound處理程序,並調用

ClientScript.RegisterForEventValidation("associateDomaine", -->CommandArgHere<--); 
+0

由於在添加CommandArgument之前發生錯誤,因此未鏈接:/ – Erick 2009-07-23 23:14:01

0

最好的解決辦法是用自己的DropDownList取代的DropDownList。創建DropDownList的子類,並在ASPX頁面上使用該列表。我認爲你的DropDownList的內容在客戶端發生了變化(可能是由Javascript?)。

相關問題