我使用MVC 5與EntityFramework,我似乎無法使用數據註釋使相關對象的選擇一個必填字段。如何製作相關對象?
我的模型很簡單。這裏是我的Movement.cs模型:
public class Movement
{
[Key]
public int MovementID { get; set; }
[Required(ErrorMessage = "Type is required.")]
[MaxLength(50, ErrorMessage = "Type cannot be longer than 50 characters.")]
public string Type { get; set; }
[Required(ErrorMessage = "Persons name is required.")]
public virtual Person Name { get; set; }
[Required(ErrorMessage = "Location is required.")]
public virtual Location Location { get; set; }
}
該運動有2個相關的實體,人員和位置是非常簡單的墨比爾。在我創建運動形式我用下面的視圖模型:
public class MovementFormViewModel
{
public Movement Movement { get; set; }
public IEnumerable<SelectListItem> Types { get; set; }
public int? SelectedLocation { get; set; }
public int? SelectedPerson { get; set; }
}
這是我的控制器:
private MovementFormViewModel createViewModel(Movement movement)
{
var types = new[]
{
new SelectListItem{ Text="Transfer", Value = "Transfer" },
new SelectListItem{ Text="Promotion", Value = "Promotion" },
new SelectListItem{ Text="N/A", Value = "N/A" }
};
var locations = db.Locations.ToArray().Select(x => new SelectListItem
{
Value = x.LocationID.ToString(),
Text = x.Name
});
var people = db.People.ToArray().Select(x => new SelectListItem
{
Value = x.PersonID.ToString(),
Text = x.FullName
});
MovementFormViewModel viewModel = new MovementFormViewModel
{
Movement = movement,
Types = types,
Locations = locations,
People = people
};
return viewModel;
}
public ActionResult Create()
{
return View(createViewModel(new Movement()));
}
最後我創造觀點對我相關實體如下:
@Html.DropDownListFor(
x => x.SelectedPerson,
Model.People,
"-- Select a Person --")
<p class="text-error">
@Html.ValidationMessageFor(model => model.MarketMovement.Name)
</p>
如果我提交表單,然後我得到驗證錯誤,我的人員和位置字段是必需的...但是當我從下拉列表中選擇一個條目並嘗試重新提交時,表單仍然會引發validat離子條目是必需的,我不能繼續。
我在做什麼錯?
好吧,這很有意義,謝謝。但是,我反而將[必需的]標記移動到ViewModel中的SelectedPerson和SelectedLocation屬性,然後驗證不會觸發 – Evonet
啊,將空值更改爲爲是修復它的另一部分,謝謝! –
Evonet