有没有一种方法可以在没有eg的情况下绑定单个项目。中继器控制?

时间:2008-10-22 11:05:08

标签: c# asp.net webforms

假设我有一个类型为Car的对象,我想将其呈现为HTML:

class Car {
  public int Wheels { get; set; }
  public string Model { get; set; }
}

我不想使用ASP.NET Repeater或ListView控件进行绑定,因为它看起来太冗长了。我只有一个对象。但我仍然希望能够使用数据绑定语法,因此我不必使用标签或文字。类似的东西:

<div>
  Wheels: <%# (int)Eval("Wheels") %><br />
  Model: <%# (string)Eval("Model") %>
</div>

是否有人知道那里有一个控件呢?

我还没准备好切换到ASP.NET MVC。


不幸的是,DetailsView控件不能满足我的需求,因为它似乎不支持我所追求的模板式语法。它也需要绑定到某种类型的DataSource对象。

我更喜欢Maxim和Torkel建议的解决方案。我会尽力去做。

3 个答案:

答案 0 :(得分:26)

如果页面是关于特定项目的(例如,Car.aspx?CarID = ABC123),我通常在名为“CurrentCar”的页面上有一个公共属性

public Car CurrentCar { get; set; }

然后我可以拥有以下内容:

<div>
  Wheels: <%= CurrentCar.Wheels %><br />
  Model: <%= CurrentCar.Model %>
</div>

允许您具有类型安全性。只需确保在实际渲染之前分配有效对象。

答案 1 :(得分:5)

我建议您在页面上将汽车设为受保护的属性,这样您就可以直接在aspx页面中访问它:

<div>
  Wheels: <%= Car.Wheels %>
  Wheels: <%= Car.Models %>
</div>

对于单项数据绑定方案,这种方法实际上更好,因为“绑定”是强类型的。

答案 2 :(得分:0)

受保护的属性解决方案的一个缺点是您无法使用它来绑定控件的属性。

例如,以下内容不起作用:

<asp:Label ID="Label1" Text="Probably a truck" Visible='<%# CurrentCart.Wheels > 4 %>' runat="server" />