Hi i have an entity called User with 2 properties called UserName and Role (which is a reference to another entity called Role). I’m trying to update the UserName and RoleID from a form which is posted back. Within my postback action i have the following code:
var user = new User();
TryUpdateModel(user, "User", new string[] { "UserName, Role.RoleID" });
TryUpdateModel(user, new string[] { "User.UserName, User.Role.RoleID" });
However none of these updates the Role.RoleID property. If i try the following:
TryUpdateModel(user, "User", new string[] { "UserName, Role" });
TryUpdateModel(user);
The RoleID is updated but the RoleName property is validated aswell. That’s why i’m trying to be more specific on which properties to update but i can’t get any of the first examples to work.
I’d appreciate if someone could help. Thanks
Here’s a complete solution to work with any relationship.
First place the following line of code in your Application_Start event:
Now you need to add the following class somewhere in your application:
Please note the above code may need to be modified to suit your needs. It affectively calls IRepository().GetByID(???). It will work when binding against any entities within the Models.Entities namespace and that have an integer value.
Now for the view there’s one other bit of work you have to do to fix a bug in ASP.NET MVC 2. By default the Selected property on a SelectListItem is ignored so i have come up with my own DropDownListFor which allows you to pass in the selected value.
Now within your view you can say:
The Role property will automatically update when you call TryUpdateModel in your controller and you have to do no additional work to wire this up. Although it’s alot of code initially i’ve found this approach saves heaps of code in the long term.
Hope this helps.