I’m the first to admit I search Google / StackOverflow no less than 10 times a day for something. Oddly, the answer to this problem was a little hard to isolate. Most posts didn’t directly outline how to get two-way binding to work in a Razor page given a Dictionary as part of the view model.
So here it is, simple and sweet …
Razor Form Binding with a Dictionary
Given the sample view model:
public class MyViewModel { public Dictionary<string, string> Books { get; set; } }
The following Razor page will successfully iterate the dictionary and create input controls so that when the data is posted back, your view model dictionary will contain the new values:
@page @model MyViewModel @{ Layout = "~/Pages/_Layout.cshtml"; } @Html.AntiForgeryToken() <form method="post"> <div class="row"> <div class="col-12"> @foreach(var item in Model) { <div class="form-group row"> <label class="col-lg-3 col-form-label">@item.Key</label> <div class="col-lg-9"> <input asp-for="@Model[item.Key]" value="@item.Value" class="form-control"> </div> </div> } </div> </div> <div class="row"> <div class="col-sm-12 text-right"> <button type="submit" class="btn btn-primary">Save</button> </div> </div> </form>
Comments
Thanks, Feech!
Comments are closed.