2012-01-31 4 views
3

방금 ​​선택한 값의 쿼리 문자열을 전달하는 페이지로 리디렉션하기 위해 SelectedIndexChanged와 함께 작동하는 AJAX Toolkit에서 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가 있습니다. 두 번째 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 파일을 생성 드롭 다운 컨트롤 (내 A 경우 MasterPage에)있는 영문 페이지에 내가이 위치 :

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

다음을 나는 폭포의 드롭 다운 상자를 수정 like :

내가 알기로 사용자 지정 드롭 다운 컨트롤을 만들면 이벤트 유효성 검사가 취소됩니다. 이 방법으로 전체 페이지에 대한 이벤트 유효성 검사를 끌 필요가 없습니다. 내 경우에는 컨트롤이 MasterPage에 앉아 있기 때문에 이벤트 유효성 검사가 전체 사이트에서 해제되었을 것입니다! 이 아아

그래서 여기 내 원작 아닌 원래 참조입니다 : http://johanleino.wordpress.com/2009/11/17/cascadingdropdown-casues-invalid-postback-or-callback-argument-error/

감사합니다 요한!

희망이 있습니다.