Вызов WebuserControl с ошибкой параметров -

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.Web.Services;
using System.Text;
using System.IO;
using System.Reflection;

namespace e_compro
{
    public partial class fetchrepeater : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        [WebMethod]
        public static string Result(string controlName)
        {
           // return RenderControl(controlName);
            Control toreturn = LoadControl(controlName, "hello");
            return toreturn;
        }

        //public static string RenderControl(string controlName)
        //{
        //    Page page = new Page();
        //    UserControl userControl = (UserControl)page.LoadControl(controlName);
        //    userControl.EnableViewState = false;
        //    HtmlForm form = new HtmlForm();
        //    form.Controls.Add(userControl);
        //    page.Controls.Add(form);

        //    StringWriter textWriter = new StringWriter();
        //    HttpContext.Current.Server.Execute(page, textWriter, false);
        //    return textWriter.ToString();
        //}

        public static UserControl LoadControl(string UserControlPath, params object[] constructorParameters)
        {
            List<Type> constParamTypes = new List<Type>();
            foreach (object constParam in constructorParameters)
            {
                constParamTypes.Add(constParam.GetType());
            }

            UserControl ctl = Page.LoadControl(UserControlPath) as UserControl;

            // Find the relevant constructor
            ConstructorInfo constructor = ctl.GetType().BaseType.GetConstructor(constParamTypes.ToArray());

            //And then call the relevant constructor
            if (constructor == null)
            {
                throw new MemberAccessException("The requested constructor was not found on : " + ctl.GetType().BaseType.ToString());
            }
            else
            {
                constructor.Invoke(ctl, constructorParameters);
            }

            // Finally return the fully initialized UC
            return ctl;
        }


    }
}

У меня есть переход от защищенного к общедоступному статическому методу для метода LoadControl. Я получаю эту ошибку для первого параметра, который является расположением файла .ascx элемента управления Webuser.

Ошибка 76. Для нестатического поля, метода или свойства «System.Web.UI.TemplateControl.LoadControl(string)» требуется ссылка на объект.


person Roger Rt    schedule 22.04.2011    source источник


Ответы (1)


Первый параметр, который вы передаете LoadControl, — это Type, а его значение controlName.GetType().BaseType равно System.Object (controlName — это string, а базовый тип stringobject) -> error Тип «System.Object» не наследуется от «System .Web.UI.Control', потому что LoadControl ожидает тип System.Web.UI.Control.

Вы хотите создать экземпляр элемента управления, указав его имя и некоторые параметры. К сожалению, нет версии LoadControl, которая принимает эти параметры. К счастью, добиться этого довольно просто. Взгляните на эту статью: Хороший пример Asp.net LoadControl с несколькими параметрами.

person manji    schedule 22.04.2011
comment
Позвольте мне взглянуть, спасибо. Я вернусь снова, как только закончу. - person Roger Rt; 22.04.2011