Я пытаюсь привязать выбранное значение в раскрывающемся списке к свойству модели, и после нескольких попыток я не могу понять, что здесь может быть не так.
Я хочу понять, как это происходит при отправке формы,выбранное пользователем значение из выпадающего списка заполнит свойство модели EF.Где model.tblPickup.LocationList
- это ENUM, а model.tblPickup.LocationType
- это свойство модели EF.
Код MVC (бритва)
<div class="form-group">
@Html.LabelFor(model => model.tblPickup.LocationType, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EnumDropDownListFor(model => model.tblPickup.LocationList, "Select Address Type", new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.tblPickup.LocationType, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.tblPickup.LocationType, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.tblPickup.LocationType, new SelectList(Enum.GetValues(typeof(WBusiness.Models.LocationTypes))), "Select Address Type", new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.tblPickup.LocationType, "", new { @class = "text-danger" })
</div>
</div>
Код позади - этосоставная модель с тремя классами:
//Actual class creatd by EF
public partial class tblLocation
{
public int Id { get; set; }
public string LocationName { get; set; }
public string OtherDetails { get; set; }
public Nullable<decimal> Latitude { get; set; }
public Nullable<decimal> Longitude { get; set; }
public string GoogleLink { get; set; }
public string PhoneNumber { get; set; }
public Nullable<int> LocationType { get; set; }
public Nullable<System.DateTime> CreateDate { get; set; }
public Nullable<System.DateTime> UpdateDate { get; set; }
public Nullable<int> ProfileId { get; set; }
public Nullable<bool> Deleted { get; set; }
public Nullable<System.DateTime> DeleteDate { get; set; }
public virtual tblProfile tblProfile { get; set; }
}
//Partial class to add custom property
public partial class tblLocation
{
public LocationTypes LocationList { get; set; }
}
//ENUM class
public enum LocationTypes
{
Pickup = 1,
Delivery = 2
}
//Composit class with order and location in it
public class OrderDetailModel
{
public tblOrder tblOrder { get; set; }
public tblLocation tblPickup { get; set; }
}
//Controller code
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(OrderDetailModel model)
{
if (ModelState.IsValid)
{
db.tblOrders.Add(model.tblOrder);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(model);
}
Когда я пытаюсь отправить форму.Я получаю следующую ошибку:
1. Для первого раскрывающегося списка: хотя поле имеет целочисленный тип, я получаю код, однако ModelState.IsValid равен false .
2. Для второго выпадающего кода: я получаю «Тип местоположения должен быть числом».Это имеет смысл, поскольку тип местоположения является целочисленным полем.