Reputation: 8141
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
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
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
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