2009-10-13 2 views
5

Ich muss einen Weg finden, deklarativ (nicht im Code hinter der Datei) den Wert einer Eigenschaft in einer ASP.Net-Webseite an ein Benutzersteuerelement zu übergeben. Das Folgende ist ein einfaches Beispiel für das, was ich versuche, aber ich kann es nicht zum Laufen bringen. Hier ist die Auszeichnung für die aspx Seite, wo ich ein Objekt der Benutzersteuerung bin erstellen:ASP.Net Übergeben von Wert von Seiteneigenschaft zu Benutzersteuerelement

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
<%@ Register Src="~/MyUserControl.ascx" TagName="MyUserControl" TagPrefix="uc1" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    <uc1:MyUserControl ID="MyUserControl1" runat="server" 
     UserControlProperty = '<%# Bind("PageProperty") %>' /> 
    </div> 
    </form> 
</body> 
</html> 

Hier ist der Code hinter (aspx.cs) Datei aus der aspx Seite:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class _Default : System.Web.UI.Page 
{ 
    public int PageProperty { get; set; } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     PageProperty = 42; 

    } 
} 
hier

ist das Markup aus dem Usercontrol (ASCX-Datei):

<%@ Control Language="C#" AutoEventWireup="true" 
CodeFile="MyUserControl.ascx.cs" Inherits="MyUserControl" %> 

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 

Und hier ist der Code hinter Datei (ascx.cs) von der Benutzersteuerung:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class MyUserControl : System.Web.UI.UserControl 
{ 
    public int UserControlProperty { get; set; } 


    protected void Page_Load(object sender, EventArgs e) 
    { 
     TextBox1.Text = UserControlProperty.ToString(); 
    } 
} 

Also, alles, was ich zu tun bin versucht, den Wert der PageProperty Eigenschaft in der aspx Seite in die Benutzersteuerung ist es UserControlProperty, einzustellen definiert passieren und dann in einem Textfeld in dem Usercontrol diesen Wert anzuzeigen. Kann mir jemand sagen, was ich hier falsch gemacht habe?

+0

welche funktionierte? :) – 0100110010101

Antwort

4

versuchen

UserControlProperty = '<%= this.PageProperty %>' 

oder prüfen, Lesung: http://support.microsoft.com/kb/307860#1b gibt es so etwas wie Page.DataBind() und Control.DataBind(). Ich bin mir nicht ganz sicher, ob sie explizit nennen sollte, aber es könnte der Fall sein ...

wenn Sie noch Ihren Fall wollen, können Sie versuchen, es durch Zeichenfolge zu tun:

public string UserControlProperty { get; set; } 

es perfekt funktioniert.

+0

Guter Vorschlag, aber es gibt einen Kompilierungsfehler. –

+0

auch, da Sie in jedem Fall ein Back-End haben, können Sie einfach eine ähnliche Definition in den Code-Behind erklären ... MyUserControl1.UserControlProperty = 124 – 0100110010101

-1

Ich würde empfehlen, einen Blick auf this article.

Es zeigt Ihnen, wie Sie Ihren eigenen ExpressionBuilder erstellen, um C# an einer beliebigen Stelle in Ihrem Markup zu analysieren, ohne DataBind oder andere Hoops durchlaufen zu müssen.

+0

Vielen Dank für den Link zum Artikel. Es war eine Lektüre wert. Um Ihre Antwort vollständig zu machen, sollten Sie zumindest die Kernbestandteile der referenzierten Lösung in Ihre Antwort aufgenommen haben. – Oliver