Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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
Asp.net mvc ASP.NET MVC 3视图和模型_Asp.net Mvc_Entity Framework_Razor - Fatal编程技术网

Asp.net mvc ASP.NET MVC 3视图和模型

Asp.net mvc ASP.NET MVC 3视图和模型,asp.net-mvc,entity-framework,razor,Asp.net Mvc,Entity Framework,Razor,我有一个称为组织的模型,该模型存储在称为模型的组件中。需要插入组织并更新组织 两个问题: 在插入新组织时,我希望确保该组织不存在,因此我插入了一些远程验证。然后将模型绑定到插入视图 现在,当我创建更新视图时,我应该使用不同的视图模型来删除重复组织名称的远程验证吗?如果是这样,我不能将我的基本组织模型用于更新视图,那么我是否需要创建两个不同的视图,一个用于插入,一个用于更新?如果是这样的话,将会有两个基本相同但使用不同模型的视图 有人能帮忙吗?对于这个特定场景,验证没有其他同名组织存在似乎对ins

我有一个称为组织的模型,该模型存储在称为模型的组件中。需要插入组织并更新组织

两个问题:

在插入新组织时,我希望确保该组织不存在,因此我插入了一些远程验证。然后将模型绑定到插入视图

现在,当我创建更新视图时,我应该使用不同的视图模型来删除重复组织名称的远程验证吗?如果是这样,我不能将我的基本组织模型用于更新视图,那么我是否需要创建两个不同的视图,一个用于插入,一个用于更新?如果是这样的话,将会有两个基本相同但使用不同模型的视图


有人能帮忙吗?

对于这个特定场景,验证没有其他同名组织存在似乎对insert和update案例都有效,因此您可以重用相同的视图模型

但是,在更新组织时验证名称不存在必须有额外的权限,因为如果用户不更改组织名称,则数据库中至少有一条记录具有该名称,即正在更新的记录,并且验证应忽略该记录

因此,如果您选择重用视图模型,则验证必须根据操作(插入或更新)的上下文执行。

  • 问题1:检查验证:
如果其内容无效,请执行以下操作:

If(isNotValid()){
    ModelState.AddModelError("Key", "The user name or password provided is incorrect.")
}
键是视图中不正确的字段

  • 问题2:创建/编辑之间的区别
您应该使用相同的ViewModel,因为在您的更新中,他们仍然可以更改“组织名称”,并且您仍然应该检查它是否唯一

但是为什么要使用ViewModel来检查验证呢?是否有原因导致您无法在控制器中检查组织名称的唯一性,并在组织名称不唯一时执行ModelState.AddModelError

例如,视图模型是指必须扩展页面的情况

  public class DashBoardViewModel
  { public List(Of Organisation) Organisation {get;set;}
    public List(Of Staff) Staff{get;set;}
    public List(Of Assignment) Assignments{get;set;}
  }
上面是一个虚构的仪表盘视图模型,我在其中显示了所有组织、员工和任务。 ViewModel不仅仅包含一种类型的对象,它还包含多种类型的对象


别忘了,有时当您需要向视图中添加一些数据时,您可以使用ViewData或ViewBag,而不是创建ViewModel。

我认为问题在于我没有使用视图模型,而只是使用域实体。我认为我需要开始创建视图模型,然后将视图绑定到视图模型,而不是域实体。一般来说,使用视图模型更好,因为您可以根据视图的实际需要定制视图模型,但这不是强制性的。正如软件开发中几乎所有的事情一样,它取决于用例。