C# 实体框架下的数据验证
我正在使用ADO.Net实体框架和asp.Net mvc3。我有一个模型是数据库第一。正如我将解释的那样,数据验证在某些情况下不起作用 我有一个表单,当我提交表单时,一些项目正在验证,而其他项目则没有。我只是用这样一个表格C# 实体框架下的数据验证,c#,asp.net,asp.net-mvc-3,entity-framework,ado.net,C#,Asp.net,Asp.net Mvc 3,Entity Framework,Ado.net,我正在使用ADO.Net实体框架和asp.Net mvc3。我有一个模型是数据库第一。正如我将解释的那样,数据验证在某些情况下不起作用 我有一个表单,当我提交表单时,一些项目正在验证,而其他项目则没有。我只是用这样一个表格 @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend></legend> &
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend></legend>
<div class="editor-label">
@Html.LabelFor(model => model.VERSION_ID)
@Html.EditorFor(model => model.VERSION_ID)
@Html.ValidationMessageFor(model => model.VERSION_ID)
</div>
<div class="editor-field">
@Html.LabelFor(model => model.ENTITY2.Name)
@Html.EditorFor(model => model.ENTITY2.Name)
@Html.ValidationMessageFor(model => model.ENTITY2.Name)
</div>
<p>
<input type="submit" value="Create" />
</p>
@使用(Html.BeginForm()){
@Html.ValidationSummary(true)
@LabelFor(model=>model.VERSION\u ID)
@EditorFor(model=>model.VERSION\u ID)
@Html.ValidationMessageFor(model=>model.VERSION\u ID)
@LabelFor(model=>model.ENTITY2.Name)
@EditorFor(model=>model.ENTITY2.Name)
@Html.ValidationMessageFor(model=>model.ENTITY2.Name)
现在,版本id已生效,而名称未生效。我正在从另一个实体获取名称。是否了解验证为何无效?我可以输入不应允许的空字段,因为该字段是必需的,但当我按submit时,我得到一个错误。我认为您的模型类允许空值 我会避免在视图中直接使用模型类,并为此创建一个单独的ViewModel(POCO类)。ViewModel应该只有视图所需的相关属性。大多数情况下不是域模型的所有属性。您可以在ViewModel上使用数据注释(必需属性等) 您的视图将被强类型化到此ViewModel。当返回到操作方法时,您将映射域模型的ViewModel中的值并保存它
[HttpPost]
public ActionResult Edit(VersionViewModel model)
{
if(ModelState.IsValid)
{
//validation is ok. Let's save
var domainModel=new Version();
domainModel.VERSION_ID=model.VersionID ;
domainModel.Name=model.Name;
//Let's save and REdirect
yourRepositary.SaveVersion(domainModel);
return RedirectToAction("Saved",new { id=model.ID});
}
return View(model);
}
而不是手动映射,您可以考虑使用类似的库。
我只需设置字段。当我运行程序并提交时,我得到一个错误,告诉我不能将该值设置为空。数据库第一个模型为ME设置了所有的验证。VIEW模型与您的实体不同。VM对于传输D是特定的。ata从view到action methods和back.this起作用了,为什么每当我在没有[REQUIRED]的情况下设置public int BLAH并运行代码时,它仍然告诉我它是REQUIRED字段。当我将它设置为string时,它并没有告诉我它是REQUIRED字段[HttpPost]
public ActionResult Edit(VersionViewModel model)
{
if(ModelState.IsValid)
{
//validation is ok. Let's save
var domainModel=new Version();
domainModel.VERSION_ID=model.VersionID ;
domainModel.Name=model.Name;
//Let's save and REdirect
yourRepositary.SaveVersion(domainModel);
return RedirectToAction("Saved",new { id=model.ID});
}
return View(model);
}