C# 无法从泛型处理程序访问用户控件公共属性

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

下面是我的通用处理程序代码。此代码将名为NavigationMenu.ascx的用户控件编译并转换为HTML,并将其发送到调用页面:

<%@ 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));