JacobE
JacobE

Reputation: 8141

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.

Upvotes: 19

Views: 7989

Answers (3)

Torkel
Torkel

Reputation: 3404

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.

Upvotes: 5

JacobE
JacobE

Reputation: 8141

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" />

Upvotes: 0

Maxime Rouiller
Maxime Rouiller

Reputation: 13699

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.

Upvotes: 26

Related Questions