Frage

ich den Inhalt einiger User Controls in meine Seite mit der Verwendung von jQuery laden. So hat ich diese Funktion, dass Extrakte der Inhalt von meiner Benutzerkontrolle, und es funktioniert wie ein Charme.

    public string GetObjectHtml(string pathToControl)
    {
        // Create instance of the page control
        Page page = new Page();

        // Create instance of the user control
        UserControl userControl = (UserControl)page.LoadControl(pathToControl);

        //Disabled ViewState- If required
        userControl.EnableViewState = false;

        //Form control is mandatory on page control to process User Controls
        HtmlForm form = new HtmlForm();

        //Add user control to the form
        form.Controls.Add(userControl);

        //Add form to the page
        page.Controls.Add(form);

        //Write the control Html to text writer
        StringWriter textWriter = new StringWriter();

        //execute page on server
        HttpContext.Current.Server.Execute(page, textWriter, false);

        // Clean up code and return html
        string html = CleanHtml(textWriter.ToString());

        return html;
    }

Aber ich möchte wirklich in einigen Parametern in meine User Control zu senden, wenn ich es schaffen. Ist dies möglich, und wie kann ich das tun?

kann ich das LoadControl() sehe einige Parameter mit object[] parameters nehmen kann, aber im wirklich nicht sicher, wie es zu benutzen, Hilfe zu schätzen!

War es hilfreich?

Lösung

Sie können eine Schnittstelle auf Ihrem Usercontrol für die entsprechenden params implementieren.

public interface ICustomParams
{
    string UserName { get; set; }
    DateTime SelectedDate { get; set; }
}

implementieren die Schnittstelle in der Usercontrol, wie diese

public partial class WebUserControl : System.Web.UI.UserControl , ICustomParams
{
    public string UserName { get; set; }
    public DateTime SelectedDate  { get; set; }
}

dann laden Sie Ihre Steuerung:

  UserControl userControl = (UserControl)page.LoadControl(pathToControl);

Acces die Kontrolle über die Schnittstelle

  ICustomParams ucontrol = userControl as ICustomParams;
  if(ucontrol!=null)
  {
       ucontrol.UserName = "henry";
       ucontrol.SelectedDate = DateTime.Now;
  }

Fertig,

Sie können dort mehrere Schnittstellen für mehrere Zwecke hinzufügen. Wenn die Usercontrol nicht die Schnittstelle implementiert, wird die if-Anweisung vermeidet es mit

Aber wenn Sie wirklich keinen Zugriff auf die Benutzersteuerelemente und Sie wissen, „ein wenig“ der Eigenschaften, die Sie festlegen möchten und welche Art sie sind versuchen, eine dynamischere Art und Weise mit Reflexion:

laden Sie die Usercontrol:

    UserControl userControl = (UserControl)Page.LoadControl(@"~/WebUserControl.ascx");

erhält die Eigenschaften des geladenen Usercontrol:

    PropertyInfo[] info = userControl.GetType().GetProperties();

Schleife durch sie:

    foreach (PropertyInfo item in info)
    {
        if (item.CanWrite)
        {
             switch (item.Name)
             {
                 case "ClientName"
                     // A property exists inside the control": //
                     item.SetValue(userControl, "john", null); 
                     // john is the new value here
                 break;
             }
        }
    }

Ich möchte Sie nur ermutigen, diese Option, wenn Sie nicht die Benutzersteuerelemente zugreifen können und es gibt Dutzende von ihnen mit viel, viel variablen Eigenschaften pro Usercontrol. (Es kann sehr hässlich, langsam und nicht ausfallsicher)

Andere Tipps

Ich bin sicher nicht, wie es allgemein getan werden kann, aber es sieht aus wie du bist Laden sowieso eigene Benutzerkontrolle. Versuchen Sie, die das Usercontrol auf die Art des Steuer Gießen Sie verwenden, zum Beispiel.

 // Create instance of the user control 
    MyUserControl userControl = (MyUserControl)page.LoadControl("/MyUserControl.ascx"); 

  userControl.Param1="my param";
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top