2011-08-01 24 views
1

可行的,我得到的错误是:为什么我不能在绑定一个的.aspx财产,而它在的.xaml

“strTitle”(PROPERT的名称)这个名字并不在当前存在背景

要非常清楚我会告诉代码:

的Silverlight:

var myData =from xAudioinfo in xResponse.Descendants(ns + "DIDL-Lite").Elements(ns + "item") 
    select new RMSMedia 
         { 
         strTitle =((string)xFolderInfo.Element(dc + "title")).Trim(),             
         objectID = (int)xFolderInfo.Attribute("id") 
         }; 

现在我能在我的XAML绑定此象下面这样:

<TextBlock Text ="{Binding strTitle}" /> 

但是,这不是在ASP.NET工作。

ASP.NET

var myData =from xAudioinfo in xResponse.Descendants(ns + "DIDL-Lite").Elements(ns + "item") 
    select new RMSMedia 
         { 
         strTitle =((string)xFolderInfo.Element(dc + "title")).Trim(),             
         objectID = (int)xFolderInfo.Attribute("id") 
         }; 

设法使用HTML控制结合:

<asp:Label ID="lbWindCondition" runat="server" Text=<%#strTitle %>></asp:Label> 

编辑: @Prisoner ZERO

我的代码结构如下:

public class currentWeatherCondition 
     { 
      public string condition { get; set; } 
      public string temp { get; set; } 
      public string imageURL { get; set; } 
      public string humidity { get; set; } 
      public string windCondition { get; set; } 
     } 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void btnGetDetails_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      var weatherXML = XDocument.Load(weatherURL); 
      var weatherResult = from weatherDetail in weatherXML.Descendants("current_conditions") 
           select new currentWeatherCondition 
           { 
            condition = ((string)weatherDetail.Element("condition").Attribute("data")).Trim(), 
            temp = ((string)weatherDetail.Element("temp_c").Attribute("data")).Trim(), 
            imageURL = ((string)weatherDetail.Element("icon").Attribute("data")).Trim(), 
            humidity = ((string)weatherDetail.Element("humidity").Attribute("data")).Trim(), 
            windCondition = ((string)weatherDetail.Element("wind_condition").Attribute("data")).Trim(), 

           }; 
      } 
    catch(..) 
     { 
      ...... 
     } 
} 

所以我们的意思是我会直接创建_Default类中的prpoerty或在默认类中创建currentWeatherCondition对象,然后将其绑定/呈现给控件。

+1

你试过文本= '<%#的eval( “strTitle”)%>' – TheGeekYouNeed

+0

的原因我想它工作在WPF但不是ASP。 net是asp.net没有wpf所具有的绑定上下文概念。推测你将mydata对象绑定到包含文本块的对象。在asp.net中,你必须明确地绑定每个属性。 –

回答

3

我得看看代码的其余部分,但我猜测值“strTitle”完全存在于RMSMedia块的范围内。您必须(随后)以四种方式之一将该值作为公共财产公开:

  1. 从页面的公共属性中获得。
  2. 从RMSMedia对象的公共属性。
  3. 编写容器的数据绑定功能。
  4. 设定值直接

万一你不知道是什么意思...

(1)从页的公共属性。

public String Title { get; set; } 

然后设置strTitle到标题和<%=标题%>。

(2)来自RMSMedia对象的公共属性。

然后设置myData.strTitle <%= myData.strTitle%>。

(3)为容器写入一个数据绑定函数。

myContainer.DataBinding += new EventHandler(myContainer_DataBinding); 

protected void myContainer_DataBinding(object sender, EventArgs e) 
{ 
    myContainer.DataSource = myData.strTitle; 
} 

要调用这最后一个,你可以使用以下:myContainer.DataBind();

(4)在函数中直接设定值

lbWindCondition.Text = myData.strTitle; 

UPDATE:
有是一堆选择,所以真的,你只要选择一个。尽管它与控件无关,但我添加了上面的第三个,只是作为一个“额外”来显示在ASP.NET中绑定的其他方式。 第四个选项是最明显的答案,虽然,因为你直接设置文本值(意思是,没有间接)。

那么我们的意思是我会直接在_Default类中创建属性?
是的......如果你喜欢那个选项。

<asp:Label ID="lbWindCondition" runat="server" Text=<%=Title %>></asp:Label> 

还是我们在默认类创建currentWeatherCondition的对象,然后它来控制?
是的......如果你喜欢那个选项。

<asp:Label ID="lbWindCondition" runat="server" Text=<%#currentWeatherCondition.YourProperty %>></asp:Label> 

您还可以使用DataBinder对象,但我通常保留,对于对象的集合(加人告诉我,以避免它,因为它是慢...我的猜测是,它是缓慢的,因为它必须使用反思以及后期约束以揭露财产)。但是,您当然可以使用它。

最后,上面的答案都没有真正讨论哪个选项是正确的选择。诚实地说,任何时候你使用间接运算符(<%%>),你都会利用迟绑定(这是不好的)。现在人们会告诉你,ASP.NET(现在)已经为后期绑定进行了优化,所以没关系......但显然它还是迟到的绑定......所以如果你“可以”这样做,直接设置值或使用数据 - 绑定选项。

我希望这有助于!

+0

,用我的代码块更新了这个问题。请看看我是否了解你 – Simsons

1

标签ASP.NET控件没有DataSource属性,因此无法直接对匿名对象进行数据绑定。你需要做的是

1)创建一个页面容器属性,它将容纳myData集合 2)绑定该属性的标签。 =>

Text = '<%# DataBinder.Eval(ContainerObject, "strTitle"); %>' 

我希望这有助于:)

相关问题