2009-10-13 18 views
5

Bir ASP.Net web sayfasındaki bir özelliğin değerini bir kullanıcı denetimine iletmek için (arkasındaki kodda yer almayan) deklaratif bir yol bulmam gerekiyor. Aşağıda, yapmaya çalıştığım şeyin basit bir örneği var, ama işe yaramayacağım.ASP.Net Sayfa Özelliğinden Kullanıcı Denetimine Duyarlı Olarak Geçirilen Değer

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; 

    } 
} 
: Burada
<%@ 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> 

aspx sayfasından (aspx.cs) dosyası arkasında kod şudur: Burada kullanıcı denetimi bir nesne kuruyorum aspx sayfası için biçimlendirme olduğunu İşte

usercontrol (ascx dosyası) biçimlendirme geçerli:

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

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

Ve burada kullanıcı kontrolünden dosyası (ascx.cs) arkasında kodudur:

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(); 
    } 
} 

Yani, yapmaya çalışıyorum hepsi bu UserControlProperty var ayarlayabilir ve ardından usercontrol bir metin kutusuna bu değeri görüntülemek için kullanıcı kontrolüne aspx sayfasında tanımlanan PageProperty özelliğinin değerini geçmesi olduğunu. Burada yanlış yaptığımı söyleyen var mı?

+0

hangisi çalıştı? :) – 0100110010101

cevap

4

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

deneyin ya düşünün okuma: http://support.microsoft.com/kb/307860#1b Page.DataBind() ve Control.DataBind() diye bir şey yoktur. Ben bunları açıkça çağırmalıdır eğer tam emin değilim ama durum olabilir ... hala davanızı istiyorsanız

, sen dize aracılığıyla bunu yapmak için deneyebilirsiniz:

public string UserControlProperty { get; set; } 

onu mükemmel çalışır.

+0

İyi öneri, ama bir derleme hatası veriyor. –

+0

Ayrıca, herhangi bir durumda bir back-end var beri, sadece arkasındaki kod içine benzer tanımı ilan edebilirsiniz ... MyUserControl1.UserControlProperty = 124 – 0100110010101

-1

this article'a göz atmanızı öneririz.

Bu, DataBind'e gerek kalmadan işaretlemenizin herhangi bir yerinde C# ayrıştırmak için kendi ExpressionBuilder'ınızı nasıl oluşturacağınızı veya başka bir çemberden atlayacağınızı gösterir.

+0

Makalenin bağlantı için teşekkür ederiz. Okumaya değerdi. Cevabınızı tamamlayabilmeniz için, cevabınıza, başvurulan çözümün en temel kısımlarını dahil etmiş olmalısınız. – Oliver

İlgili konular