2015-08-13 69 views
0

我试图无约束地动态绑定用户控件。在我的父页面调用Main.aspx & usercontrol调用UC_1.ascx。Usercontrol asp:dropdownlist选择的更改事件不会触发?

我试图通过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(); 
      } 
     } 
    } 
} 

在我的UserControl中我有一个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) 
     { 

     } 
    } 
} 

但是当我选择下拉列表项。事件没有开火。它走错了路。

如何解决这个问题。

有什么想法?

回答

0

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

<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> 
相关问题