Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架下的数据验证_C#_Asp.net_Asp.net Mvc 3_Entity Framework_Ado.net - Fatal编程技术网

C# 实体框架下的数据验证

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> &

我正在使用ADO.Net实体框架和asp.Net mvc3。我有一个模型是数据库第一。正如我将解释的那样,数据验证在某些情况下不起作用

我有一个表单,当我提交表单时,一些项目正在验证,而其他项目则没有。我只是用这样一个表格

    @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);
}