我有三個模型:VehicleType
,VehicleModel
和VehicleManufacturer
。多個模型的MVC客戶端驗證
兩個VehicleType
和VehicleManufacturer
點VehicleModel
在模型中,像這樣:
public class VehicleModel
{
[Key]
public int ModelId { get; set; }
[Required(ErrorMessage = "Field is Required")]
public int TypeId { get; set; }
[Required(ErrorMessage = "Field is Required")]
public int ManufacturerId { get; set; }
public string ModelName { get; set; }
public VehicleType VehicleType { get; set; }
public VehicleManufacturer Manufacturer { get; set; }
}
從那裏,VehicleModel指向InventoryModel:
public class Inventory
{
[Key]
public int InventoryId { get; set; }
public int Price { get; set; }
public int Mileage { get; set; }
public int Year { get; set; }
public int ModelId { get; set; }
public VehicleModel VehicleModel { get; set; }
}
我的問題是,當我試圖讓客戶端所有三個dropdownlists(VehicleType
,VehicleManufacturer
,VehicleModel
)工作驗證,它只適用於VehicleModel
。
需要做什麼來驗證使用這些模型的這兩個dropdownlist?
這裏是我的控制器(僅供參考):
// GET: /Inventory/Create
public ActionResult Create()
{
ViewBag.TypeId = new SelectList(db.Types, "TypeId", "TypeName"); //(Object List, Value Field (usually Id), Column)
ViewBag.ModelId = new SelectList(db.Models, "ModelId", "ModelName"); //(Object List, Value Field (usually Id), Column)
ViewBag.ManufacturerId = new SelectList(db.Manufacturers, "ManufacturerId", "ManufacturerName"); //(Object List, Value Field (usually Id), Column)
return View();
}
// POST: /Inventory/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Inventory inventory, VehicleManufacturer VehicleManufacturer, VehicleType VehicleType)
{
if (ModelState.IsValid)
{
db.Inventorys.Add(inventory);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.TypeId = new SelectList(db.Types, "TypeId", "TypeName");
ViewBag.ModelId = new SelectList(db.Models, "ModelId", "ModelName");
ViewBag.ManufacturerId = new SelectList(db.Manufacturers, "ManufacturerId", "ManufacturerName");
return View(inventory);
}
查看:
<div class="editor-label">
@Html.LabelFor(model => model.VehicleModel.TypeId, "Some name for column")
</div>
<div class="editor-field">
@Html.DropDownList("TypeId", String.Empty)
@Html.ValidationMessageFor(model => model.VehicleModel.TypeId)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ModelId, "Some name for column")
</div>
<div class="editor-field">
@Html.DropDownList("ModelId", String.Empty)
@Html.ValidationMessageFor(model => model.ModelId)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.VehicleModel.ManufacturerId, "Some name for column")
</div>
<div class="editor-field">
@Html.DropDownList("ManufacturerId", String.Empty)
@Html.ValidationMessageFor(model => model.VehicleModel.ManufacturerId)
</div>
請人幫忙。我已經在這很多很多小時了!
我沒有看到任何驗證屬性,您是否忘記在此處添加它或將它們全部忘在一起 – hjavaher
您實際上沒有任何驗證屬性。另外,要小心使用'RequiredAttribute'來驗證一個值類型,因爲它們總是會有一個默認的值(因此總會有一個值)。 –
對不起,傢伙,有驗證,我只是沒有添加到問題 – Batsu