ASP.Net CascadingDropDown и EnableEventValidation = "ложь" - PullRequest
3 голосов
/ 01 февраля 2012

Я только что получил CascadingDropDown от AJAX Toolkit, работающего с SelectedIndexChanged, чтобы перенаправить на страницу, передающую строку запроса выбранного значения.Я в полном восторге!

Однако событие SelectedIndexChanged у меня получилось, только добавив EnableEventValidation = "false" на страницу.Проблема в том, что CascadingDropDown будет размещен на главной странице моего сайта в качестве селектора продукта.

Я не заинтересован в добавлении EnableEventValidation = "false" в мою мастер-страницу!Я посмотрел на метод ClientScriptManager.RegisterForEventValidation на MSDN, и он у меня над головой.

Что лучше всего сделать?Есть ли простой пример использования ClientScriptManager.RegisterForEventValidation?

Cheers ...

РЕДАКТИРОВАТЬ: Вот код:

<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);
        }

1 Ответ

2 голосов
/ 21 февраля 2012

Ответ на эту проблему боли в шее - пользовательские выпадающие элементы управления!

Итак, чтобы закрыть этот вопрос и, надеюсь, помочь кому-то еще обойти эту проблему, вот что я сделал:

Я создал файл cs с именем NoValidationDropDownList.cs со следующим кодом

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
    {
    }
}

Затем на странице aspx, где находятся раскрывающиеся элементы управления (в моем случае MasterPage), я разместил это:

<%@ 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/

Спасибо, Йохан!

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...