2012-01-31 37 views
3

AJAX ToolkitからSelectedIndexChangedを操作してCascadingDropDownを取得し、選択した値のクエリー文字列を渡すページにリダイレクトしました。私はうんざりだ!ASP.Net CascadingDropDownとEnableEventValidation = "false"

しかし、SelectedIndexChangedイベントは、EnableEventValidation = "false"をページに追加することで機能します。問題は、CascadingDropDownが製品セレクタとしての私のウェブサイトのMasterPageに配置されることです。

私はMasterPageにEnableEventValidation = "false"を追加することに熱心ではありません!私はMSDNのClientScriptManager.RegisterForEventValidationメソッドを見て、それは私の頭の上に行ってしまった。

何が最善のことですか? ClientScriptManager.RegisterForEventValidationを使用する簡単な例はありますか?

乾杯...

編集:ここでは、コードがあります:

<asp:ScriptManager ID="asm" runat="server" /> 
<div> 
    Series:  <asp:DropDownList ID="SeriesList" runat="server" /><br /> 
    Printers: <asp:DropDownList ID="PrinterList" runat="server" 
       onselectedindexchanged="PrinterList_SelectedIndexChanged" 
      AutoPostBack="True" /><br /> 
</div> 

    <asp:CascadingDropDown ID="ccd1" runat="server" 
     ServicePath="CascadingDropdown1.cs.asmx" ServiceMethod="GetSeries" 
     TargetControlID="SeriesList" Category="Series" 
     PromptText="Select Series" /> 
    <asp:CascadingDropDown ID="ccd2" runat="server" 
     ServicePath="CascadingDropdown1.cs.asmx" ServiceMethod="GetPrintersForSeries" 
     TargetControlID="PrinterList" ParentControlID="SeriesList" Category="Printer" 
     PromptText="Select Printer" /> 

    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 

     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="PrinterList" EventName="SelectedIndexChanged" /> 
     </Triggers> 
    </asp:UpdatePanel> 

そして、ここでは、イベントです:首の問題で

protected void PrinterList_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      int printerID = Convert.ToInt32(PrinterList.SelectedValue); 
      System.Web.HttpContext.Current.Response.Redirect("Default.aspx?PID="+printerID); 
     } 
+0

このドロップダウンにはどのような種類のテキストがありますか?いくつかの例を教えてください。 –

+0

最初のddlには、Epsonプリンタのシリーズ名、つまりStylus、Stylus Color、Stylus Photoがあります。また、2番目のddlには対応するモデル番号があります:BX535WD、DX4000、DX7400 etx。 8シリーズがあり、合計229台のプリンタがあります。 「スタイラスカラー」は最長です。 – ComfortablyNumb

+0

EnableEventValidation = "true"次のJScriptランタイムエラーが発生します。Sys.WebForms.PageRequestManagerServerErrorException:ポストバックまたはコールバックの引数が無効です。イベントの検証は、ページまたは<%@ Page EnableEventValidation = "true"%>のを使用して有効にします。セキュリティ上の理由から、この機能はポストバックまたはコールバックイベントの引数が元々レンダリングされたサーバーコントロールから発生することを確認します。データが...あれば、ああ、まあまあ! – ComfortablyNumb

答えて

2

この痛みへの答えは、カスタムドロップダウンコントロールであります!

だから、この質問を閉鎖し、うまくいけば他の誰かがここでこの問題ラウンドを取得するのに役立つが、私がやったことです:

私は、その後、次のコード

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI.WebControls; 

namespace My.Namespace.Controls 
{ 
    public class DdlNoEventValidation : DropDownList 
    { 
    } 
} 

とNoValidationDropDownList.csと呼ばCSファイルを作成ドロップダウンコントロールが(私の場合マスターページには)存在aspxページに私はこれを置く:

<%@ Register TagPrefix="asp" Namespace="My.Namespace.Controls" %> 

次の私は、カスケードドロップダウンボックスを改正しました以下のようなので、私は、カスタムドロップダウンコントロール回避するイベントの検証を作成し、それを理解したよう

<p><asp:DdlNoEventValidation ID="DD1" runat="server" /></p> 
<p><asp:DdlNoEventValidation ID="DD2" runat="server" 
    onselectedindexchanged="My_SelectedIndexChanged" 
    AutoPostBack="True" 
    /></p> 

。この方法では、ページ全体のイベント検証をオフにする必要はありません。私のケースでは、コントロールがMasterPageに座っているため、イベントの検証はサイト全体でオフになっていました。この可哀想

はので、ここで私のオリジナル作品ではありません元の参照です:http://johanleino.wordpress.com/2009/11/17/cascadingdropdown-casues-invalid-postback-or-callback-argument-error/

おかげヨハン!

希望します。

関連する問題