【问题标题】:Select DropDownList item inside of a Repeater control在 Repeater 控件内选择 DropDownList 项
【发布时间】:2009-07-23 22:34:21
【问题描述】:

我有一个中继器,其中包含一些项目,其中有一个 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>

问题:

当我单击按钮时,每次都会出现 Invalid Postback 或 Callback 异常( Invalid postback 或 callback 参数。事件验证在配置中启用或在页面中使用 。为了安全目的,此功能验证回发或回调事件的参数是否来自最初呈现它们的服务器控件。如果数据有效且符合预期,请使用 ClientScriptManager.RegisterForEventValidation 方法注册回发或回调数据以进行验证。)。但一切似乎都很标准,没有任何真正的异国情调。我也没有通过 javascript 添加任何东西或控件。

我看到了可以将&lt;pages enableEventValidation="false" /&gt; 放在web.config 中的解决方案,但我不确定这是一个好的解决方案,因为我想确保保留 asp.net 内置的安全模型。

是否存在任何变通办法?

【问题讨论】:

  • 那个 CommandArgument/Name 真的有效吗?因为我有类似的东西,我根本无法让它工作!完全忽略命令参数。

标签: c# asp.net drop-down-menu repeater


【解决方案1】:

如果不稍微测试一下您的代码(我现在没有时间做这件事),我无法确定,但是您能否验证您分配给按钮的动态 CommandArgument 是否是罪魁祸首?取出来会不会一直报错?

如果是这种情况,您可以尝试处理 OnItemDataBound 处理程序中的每一行并调用

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

【讨论】:

  • 它没有链接,因为错误发生在添加 CommandArgument 之前:/
【解决方案2】:

最好的解决方案是将 DropDownList 替换为您自己的 DropDownList。创建 DropDownList 的子类,并在 ASPX 页面上使用该列表。我认为您的 DropDownList 的内容在客户端发生了更改(可能是通过 Javascript?)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    相关资源
    最近更新 更多