简体   繁体   中英

Is there a way to data bind a single item without eg. a Repeater control?

Lets say I have a single object of type Car which I want to render as HTML:

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

I don't want to use the ASP.NET Repeater or ListView controls to bind because it seems too verbose. I just have the one object. But I still want to be able to use the databinding syntax so I won't have to use Labels or Literals. Something like:

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

Does anybody know about a control out there that does just that?

And I am not ready to switch to ASP.NET MVC just yet.


Unfortunately, the DetailsView control doesn't satisfy my needs because it doesn't seem to support the template-style syntax that I am after. It, too, needs to be bound to a DataSource object of a kind.

I liked better the solution Maxim and Torkel suggested. I will try to go for that.

if the page is about a specific item (For exemple, Car.aspx?CarID=ABC123), I normally have a public property on the page called "CurrentCar"

public Car CurrentCar { get; set; }

And I can then have the following:

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

That allow you to have type safety. Just make sure to have a valid object assigned before the actual rendering.

I would suggest you make car a protected property on the page, this will allow you to access it directly in the aspx page:

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

This approach is actually better for single item databinding scenarios as the "binding" is strongly typed.

One drawback of the protected property solution is that you cannot use it to bind to properties of controls.

For example, the following would not work:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM