Nate-Wilkins Nate-Wilkins - 2 months ago 10
C# Question

MVC3 - HiddenFor Dictionary Values

I have a dictionary property called Week:

public IDictionary<DayOfWeek, Day> Week { get; private set; }


And I'm trying to pass its values off to
HiddenFor
(Days)

@Html.HiddenFor(x => x.Week.Values)


It has to be a property of the Model so I can't do
x.Week.Values.ToList();


How would I go about passing the Dictionary Values to the
Html.HiddenFor
?

Answer

Well since your using HiddenFor, I'm going to assume that you need to rebind the values of the dictionary on form post. To bind a Dictionary to the view, your going to need to do something like this:

@foreach (var key in Model.Week.Keys)
{
    Html.DisplayFor(model=>model.Week[key]);
}

Each value in the dictionary will be given its own Hidden Input field, with the name attribute: name="Week.{key here}

If, on the other hand, all you need to do is send the data in your model to the client so that you can do something with it in JavaScript, you might want to look at writing it to the page as JSON.

<script type="text/javascript">
@Html.Raw(Json.Encode(Model.Week))
</script>