Your dropdown is incorrectly bound. It should be bound to a scalar property to hold the selected value:
@Html.DropDownListFor(
m => m.rol.Role,
Model.roles,
new { id = "AdmPermUserRolesDropDown" }
)
As far as the Roles collection property is concerned, it will always be null in your controller action because this list is never sent to the server when you submit a form. Only the selected value is sent. So if you need to redisplay this view once again you will have to populate the Roles collection property in your HttpPost action the same way you did in your GET action.
Also your checkbox is bound to some m => m.rol.conceder
property which doesn't exist in the view model you have shown. I guess you meant using the canGrant
boolean property. Also you don't need to provide as second parameter to the CheckBoxFor helper the value. It will be inferred from the lambda expression:
@Html.CheckBoxFor(m => m.rol.canGrant) <span>Delegate?</span>
Last but not least, since you are using an Ajax.BeginForm
make sure that you have referenced the jquery.unobtrusive-ajax.js
script in your view.