C# 无法从泛型处理程序访问用户控件公共属性
下面是我的通用处理程序代码。此代码将名为NavigationMenu.ascx的用户控件编译并转换为HTML,并将其发送到调用页面:C# 无法从泛型处理程序访问用户控件公共属性,c#,asp.net,.net,user-controls,httphandler,C#,Asp.net,.net,User Controls,Httphandler,下面是我的通用处理程序代码。此代码将名为NavigationMenu.ascx的用户控件编译并转换为HTML,并将其发送到调用页面: <%@ WebHandler Language="C#" Class="GetMenu" %> using System; using System.Web; using System.Web.Script.Serialization; public class GetMenu : IHttpHandler { public void Proc
<%@ WebHandler Language="C#" Class="GetMenu" %>
using System;
using System.Web;
using System.Web.Script.Serialization;
public class GetMenu : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//--some other code
string markup = getUserControlMarkup(0);
context.Response.Write(markup);
}
public string getUserControlMarkup(int menuType)
{
System.IO.StringWriter writer = new System.IO.StringWriter();
using (System.Web.UI.Page page = new System.Web.UI.Page())
{
System.Web.UI.UserControl userControl = null;
userControl = (System.Web.UI.UserControl)page.LoadControl("~/user controls/NavigationMenu.ascx");
Type type = userControl.GetType();
page.Controls.Add(userControl);
HttpContext.Current.Server.Execute(page, writer, false);
return writer.ToString();
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
现在我想访问menuType并从通用处理程序中选择editem。我试着这样访问它们:
((NM.user_controls_NavigationMenu)userControl).menuType=0;
但是VisualStudio无法找到NM名称空间。我尝试在NM名称空间中添加泛型处理程序类,但仍然存在相同的问题。请告诉我怎么解决这个问题?最后我自己解决了。我在解决方案资源管理器中右键单击项目并选择“转换为Web应用程序”,将项目转换为Web应用程序。它成功了 将usercontrol实例添加到没有表单的asp.net页面实例将导致类似以下错误。 解决方案是派生Page类和VerifyRenderingInServerForm方法 将Page替换为上述类
var pageHolder = new FormlessPage();
pageHolder.Controls.Add(pageHolder.LoadControl(path));
至于VS不允许您引用UserControl类的主要问题,请打开类视图并查找UserControl。通过这种方式,您可以轻松理解名称空间层次结构
((NM.user_controls_NavigationMenu)userControl).menuType=0;
public class FormlessPage : Page
{
public override void VerifyRenderingInServerForm(Control control)
{
}
}
var pageHolder = new FormlessPage();
pageHolder.Controls.Add(pageHolder.LoadControl(path));