I've been struggling with this all day this is my first ever post so apologizes if its difficult to understand or not formatted well
I'm using a ViewModel to combine two entities in one view. for the first entity im using textboxfor & lablefor html helpers to gather data for a post request. For the second entity Im using a dropdownlistfor which is a selectlist of a group of address objects which are entered in another view. i have used data annotations on my address class to make all fields required. once entries have passed validation and saved to my database via the add address view. when i try to select it with a view model i get validation exception indicating that the fields are required on my address entries
if i remove validation on the address class it seems to work
my controller
public ActionResult AddMember()
{
var ViewMember = new MemberViewModel();
ViewMember.AddressList = new SelectList(_context.Addresses, "Id", "streetName");
return View(ViewMember);
}
[HttpPost]
public ActionResult AddMember(MemberViewModel Entry)
{
var entry = new Member();
entry = Entry.member;
entry.Address = new Address() {Id= Entry.addressId };
if (ModelState.IsValid)
{
repository.AddMember(entry, _context);
TempData["message"] = "Your Member was added";
return RedirectToAction("Members", new { id = entry.Id });
}
return View();
}
my view
@model AdesinaWebApp.ViewModels.MemberViewModel
@{
ViewBag.Title = "AddMember";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>AddMember</h2>
@using (Html.BeginForm()){
@Html.LabelFor(fn => fn.member.Name)<br>
@Html.TextBoxFor(fn => fn.member.Name)<br /><br />
@Html.LabelFor(fn => fn.member.LastName)<br>
@Html.TextBoxFor(fn => fn.member.LastName)<br />
@*@Html.LabelFor(fn => fn.address.DoorNumber)<br>
@Html.TextBoxFor(fn => fn.address.DoorNumber)<br /><br />
@Html.LabelFor(fn => fn.address.streetName)<br>
@Html.TextBoxFor(fn => fn.address.streetName)<br /><br />
@Html.LabelFor(fn => fn.address.PostCode)<br>
@Html.TextBoxFor(fn => fn.address.PostCode)<br /><br />*@
@Html.LabelFor(m=>m.addressId)
@Html.DropDownListFor(m=>m.addressId,Model.AddressList,"please select your address")
<button type="submit">Submit</button>
}
my view model
public class MemberViewModel
{
public int addressId { get; set; }
public Address address { get; set; }
public Member member { get; set; } = new Member();
public SelectList AddressList { get; set; }
}
my address class
public class Address
{
[Key]
public int Id { get; set; }
[Required(ErrorMessage = "Please enter a Door Number")]
public int DoorNumber { get; set; }
[Required(ErrorMessage = "Please enter a Street Name.")]
public string streetName { get; set; }
[Required(ErrorMessage = "Please enter a Post Code.")]
public string PostCode { get; set; }
public ICollection<Member> Members { get; set; }
}
public class Member
{
[Key]
[Required]
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string LastName { get; set; }
public Address Address { get; set; }
}
your help will be much appreciated