【问题标题】:Usercontrol asp:dropdownlist selected change event not firing?用户控件 asp:dropdownlist 选择的更改事件未触发?
【发布时间】:2015-08-13 07:14:12
【问题描述】:

我尝试在没有占位符的情况下动态绑定用户控件。在我名为 Main.aspx 的父页面和名为 UC_1.ascx 的用户控件中。

我尝试通过ajax调用绑定用户控件下面是我的aspx页面代码:

Main.aspx

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<script src="../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function callUC() {
            //alert("call loadUsercontrol method....");
            var userControl = "CrossTab.ascx";
            var selectimg = $('#divCrossTab');

            $.ajax({
                type: "POST",
                url: "Main.aspx/LoadUserControl",
                data: "{message: '" + userControl + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (r) {
                    alert("success");
                    $(selectimg).append(r.d);
                },
                error: function (r) {
                    var ss = r;
                    alert("fail");
                }
            });
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">

    <div id="divCrossTab" runat="server"></div>


    <div>
        <a onclick="callUC();">click to call usercontrol</a>        
        <asp:PlaceHolder ID="placeHolderTest" runat="server"></asp:PlaceHolder>
    </div>
    </form>
</body>
</html>

Main.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Web.Services;

namespace div_PopUp_issue.UserControls
{
    public partial class Main : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //Page.Controls.Add(Page.LoadControl(@"~/UserControls/CrossTab.ascx")); 

        }

        [WebMethod]
        public static string LoadUserControl(string message)
        {
            using (Page page = new Page())
            {
                System.Web.UI.UserControl userControl = null;
                string path = @"~/UserControls/CrossTab.ascx";

                userControl = (System.Web.UI.UserControl)page.LoadControl(path);

                // dynamically adding a script manager
                var sm = new System.Web.UI.ScriptManager();
                //var sm1 = new Telerik.Web.UI.RadScriptManager();

                HtmlForm form = new HtmlForm();
                form.Controls.Add(sm);
                //form.Controls.Add(sm1);
                form.Controls.Clear();
                form.Controls.Add(userControl);
                page.Controls.Add(form);
                StringWriter writer = new StringWriter();
                HttpContext.Current.Server.Execute(page, writer, false);
                return writer.ToString();
            }
        }
    }
}

在我的用户控件中,我有一个 asp:dropdownlist。 UC_1.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CrossTab.ascx.cs" Inherits="div_PopUp_issue.UserControls.CrossTab" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %> 

<asp:DropDownList ID="ddlTest" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlTest_SelectedIndexChanged">
    <asp:ListItem Selected="True" Text="a" Value="a"></asp:ListItem>
    <asp:ListItem Text="b" Value="b"></asp:ListItem>
    <asp:ListItem Text="c" Value="c"></asp:ListItem>
</asp:DropDownList>

UC_1.ascx.cs

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

namespace div_PopUp_issue.UserControls
{
    public partial class CrossTab : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void ddlTest_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}

但是当我选择下拉列表项目时。事件未触发。它走错了路。

如何解决。

有什么想法吗?

【问题讨论】:

    标签: c# jquery asp.net user-controls


    【解决方案1】:

    请确保下拉列表的 id 是唯一的,因为当它重复时会导致错误并且不会触发事件。在您的 UserControl 中搜索 ddlTest Id。您可以通过在浏览器中使用 firbug 或检查元素来检查这一点。希望这可以帮助您一点,还有一件事确保您的下拉列表是表单标签

     <form>
    <asp:DropDownList ID="ddlTest" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlTest_SelectedIndexChanged">
        <asp:ListItem Selected="True" Text="a" Value="a"></asp:ListItem>
        <asp:ListItem Text="b" Value="b"></asp:ListItem>
        <asp:ListItem Text="c" Value="c"></asp:ListItem>
    </asp:DropDownList>
    </form>
    

    【讨论】:

      猜你喜欢
      • 2014-02-12
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多