I get a NullReferenceException
on Roles, and Subscriptions, I am not sure why, my Model.State
check is false
, so it is invalid. I have passed the same view model to my post method as my get method has.
Form
<div class="form-group">
@Html.LabelFor(m => m.User.UserRoles)
@Html.DropDownListFor(m => m.User.SelectedUserRoleId, Model.User.UserRoles, "Role", new { id = "txtBusinessName", @class = "form-control", placeholder = "Business Name" })
</div>
<div class="form-group">
@Html.LabelFor(m => m.Business.Subscriptions)
@Html.DropDownListFor(m => m.Business.SelectedSubscriptionId, Model.Business.Subscriptions, "Subscription Type", new { id = "txtBusinessName", @class = "form-control", placeholder = "Business Name" })
</div>
Model
public class RegisterationViewModel
{
public BusinessViewModel Business { get; set; }
public UserViewModel User { get; set; }
}
UserViewModel properties with error
public Guid SelectedUserRoleId {get; set;}
[Display(Name = "Role")]
[Required]
public IEnumerable<SelectListItem> UserRoles { get; set; }
BusinessViewModel properties with error
public Guid SelectedSubscriptionId {get; set; }
[Display(Name = "Subscription Type")]
[Required]
public IEnumerable<SelectListItem> Subscriptions { get; set; }
Get Method
[HttpGet]
public ActionResult Register()
{
var businessSubscriptionViewModels = new List<BusinessSubscriptionViewModel>();
var userRoleViewModels = new List<UserRoleViewModel>();
var registrationViewModel = new RegisterationViewModel();
businessSubscriptionViewModels.AddRange(
_subscriptionServiceClient.GetBusinessSubscriptionContracts()
.Select(Mapper.Map<BusinessSubscriptionContract, BusinessSubscriptionViewModel>));
registrationViewModel.Business = new BusinessViewModel
{
Subscriptions = new SelectList(businessSubscriptionViewModels, "Id", "Name")
};
userRoleViewModels.AddRange(
_userRoleServiceClient.GetUserRoles().Select(Mapper.Map<UserRoleContract, UserRoleViewModel>));
registrationViewModel.User = new UserViewModel
{
UserRoles = new SelectList(userRoleViewModels, "Id", "Name")
};
return View(registrationViewModel);
}
Post Method
[HttpPost]
public ActionResult Register(RegisterationViewModel registerationViewModel)
{
if (!ModelState.IsValid)
{
return View();
}
var businessContract = Mapper.Map<BusinessViewModel, BusinessContract>(registerationViewModel.Business);
var registeredBusiness = _businessRegistrationServiceClient.CreateBusiness(businessContract);
var userContract = Mapper.Map<UserViewModel, UserContract>(registerationViewModel.User);
var registeredUser = _userServiceClient.CreateUser(businessContract.ID, userContract);
return View(registerationViewModel);
}