How do I pass complex types to Html.LabelFor?

Viewed 95

It doesn't work like this, the error is:

Expected ","

    @Html.LabelFor(ViewBag.OrganizationDetails => (string)ViewBag.OrganizationDetails.AddressLegal, htmlAttributes: new { @class = "control-label col-md-2" })

The OrganizationDetails is a class and the AddressLegal is a string (need its value)

2 Answers

Try this:

@model ParentModel

@Html.LabelFor(model => model.Name)
@Html.LabelFor(model => model.Child.Name)

in your case should be:

@model ViewBag.OrganizationDetails

@Html.LabelFor(model => model.AddressLegal, new { @class = "control-label col-md-2" })

or

@model ViewBag

@Html.LabelFor(model => model.OrganizationDetails.AddressLegal, new { @class = "control-label col-md-2" })

I haven't tried it.

You have two choices.

The first, when using the ViewBag:

@using Models
@{
    ViewBag.Title = "Home Page";
    OrganizationDetails details = ViewBag.OrganizationDetails;
}

@Html.LabelFor(m => details.AddressLegal, htmlAttributes: new { @class = "control-label col-md-2" })

The second, use the strongly typed version of the Html.LabelFor() by passing the model to the view:

public ActionResult Index()
{
    var model = new OrganizationDetails() { AddressLegal = "Address" /* set another properties ... */};    
    return View(model);
}

And in the view:

@model Models.OrganizationDetails

@Html.LabelFor(m => m.AddressLegal, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.DisplayFor(m => m.AddressLegal)
Related