ASP.Net 2.0 -- Benutzerdefinierte Attribute auf WebControls anwenden


Janek

Grünschnabel
Hallo Leute,

ich habe mir viele Gedanken gemacht, wie ich eine BusinessFacade effektiv umsetzten kann. In .Net 1.1 klappt es auch hevorragend. Da wir nun aber .Net 2.0 einsetzten werden stoße ich auf ein unvorhergesehenes Problem. Bei den Webseiten (ASP.Net 2.0) kann ich nicht mehr direkt auf die WebControls zugreifen, sprich:

Code:
protected TextBox txtBox;
finde ich nicht mehr im Code(Behind)Beside.

Doch dise Programmzeile brauche ich doch um folgendes damit zu machen

Code:
[TextBoxAttribut("Textbox1")]
protected TextBox txtBox;

Wie kann ich wieder meine eigenen Attribute an ein Webcontrol einer Webseite anhängen?

Sehr, sehr wichtig.

Grüße und besten Dank sagt Janek
 

drvj

Mitglied
Hallo,

hier ein kleines Beispiel für das Verwenden von Tag Attributen von Web User Controls:

WebUserControl.ascx:
Code:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
WebUserControl.ascx.cs
Code:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class WebUserControl : System.Web.UI.UserControl
{
    public String TextBoxContent
    {
        get { return TextBox1.Text; }
        set { TextBox1.Text = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        
    }
}
Default.aspx
Code:
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register TagName="Message" TagPrefix="Acme" Src="~/WebUserControl.ascx"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <Acme:Message TextBoxContent="Hallo" runat="server"/>
    </div>
    </form>
</body>
</html>

Hoffe der Quellcode hilft weiter.

Mfg,
Jens
 

Janek

Grünschnabel
Hallo drvj,

Leider ist das nicht die Lösung für mein Problem, denn diese Methodik ist mir schon bekannt. Nein, ich brauche die Attributierung der "Fields" für das typenlose Auslesen der Members mit Hilfe einer Reflection. Sprich, ich lese in einer Klasse, an die ich den Typ der Webseite gesendet habe, die CustomAttributes aus.

Type type = MeineWebseite.GetType();
MemberInfo mi = type.GetMembers(true);


Anschließend kann ich mit

mi.GetCustomAttributes([Typ des benutzerdefinierten Attributes], true)

auf die Attributdaten zugreifen.

Seit ASP 2.0 kann ich keine Attribute an die "Fields" anhängen, daher hilft mir die obenstehende Vorgehensweise nicht mehr.

Gut, ich werd mich mal wieder ans Problem machen, ich denke, dass ich so etwas ähnliches machen werde wie du oben beschieben hast. (property erstellen)