Asp.net mvc 由于隐藏了id字段,ModelState.IsValid为false

Asp.net mvc 由于隐藏了id字段,ModelState.IsValid为false,asp.net-mvc,asp.net-mvc-4,razor,Asp.net Mvc,Asp.net Mvc 4,Razor,ModelState.Isvalid始终显示false 我有下面的型号 public class MyModel: MyEntity { [Key] public int MyModelID { get; set; } [Required] [StringLength(255)] public string Forename { get; set; } [Required] [StringLength(255)] public st

ModelState.Isvalid
始终显示false

我有下面的型号

public class MyModel: MyEntity
{
    [Key]
    public int MyModelID { get; set; }
    [Required]
    [StringLength(255)]
    public string Forename { get; set; }
    [Required]
    [StringLength(255)]
    public string Surname { get; set; }
}
我有这个模型

public class MydatabaseVM
{
    public MyModel myMode { get; set; }
    public virtual Tab2 tab2 { get; set; }  
    public virtual Employee employee { get; set; }  
    public virtual Student student { get; set; }  
}
我在一个视图中使用这个

<div id="email" class="tab-pane fade">
    @Html.HiddenFor(model => model.MyModel.MyModelID )
</div>

@Html.HiddenFor(model=>model.MyModel.MyModelID)
在我的视图中,我在一个隐藏字段中有
MyModelID
,因为我的页面中有几个选项卡,我希望保留该id以传递给其他选项卡

保存后,我需要隐藏字段中的
MyModelID
。在这里,如果我单击save,当它进入post操作时,
ModelState.IsValid
总是返回false


我试着移除隐藏的字段,结果它变成了现实。你能帮我看看我做错了什么吗?我的实际需求是在一个页面中,我有多个选项卡,主选项卡有一些基本的细节。当我在第一个选项卡上保存数据时,细节应该转到数据库,并生成和id。当我单击其他选项卡时(使用ajax和jquery)is应该传递给这些属性,数据应该保存到表tab2

ModelState
无效,因为您在视图中使用的数据模型包含两个属性(
Forename
names
),它们用
[必需的]
属性修饰,并且您没有为它们发布值

删除隐藏的输入时,
DefaultModelBinder
初始化
MydatabaseVM
的新实例,但
myMode
的值是默认值(
null
),因此无需验证

但是当您包含隐藏的输入时,它的值将被发布,这将强制
DefaultModelBinder
初始化
MyModel
的新实例并设置
MyModelID
。因此,现在验证了
MyModel
的所有属性,并为其他两个属性添加了错误

规则1:编辑数据时始终使用。你的情况应该是这样的

public class MydatabaseVM
{
    public int MyModelID { get; set; }
    public virtual Tab2 tab2 { get; set; }  
}
在我看来

@Html.HiddenFor( m=> m.MyModelID )

我想你有打字错误。您已将myMode声明为MyModel类型,但是,您正在引用model.MyModel。如果MydatabaseWM是该视图的模型,那么这是一个无效的引用。请检查
ModelState.Errors
以查看有什么问题wrong@haim:id错误。需要从数据库自动生成id。如果modelstate有效,我应该去保存记录,然后只有我才能获得id。@Irb.:MydatabaseWM是视图的模型。您能告诉我这是什么错误吗您的
MyModelID
int
类型,因此它会自动触发
Required
属性。您的模型绑定器可能没有绑定
model.MyModel.MyModelID
,因此它会将
null
发送到您的帖子。谢谢Stephen。我正在提供姓氏和名字的值。如果是我的隐藏id,则失败。请清除提供的modelbinder解释。谢谢。我的视图模型我想包括公共的MyModel myMode{get;set;}类。你是说你的视图中有
MyModel.Forename
MyModel.Nastname
?你的意思是为每个选项卡维护多个视图模型吗?不。我正在提供姓氏和名字的值。。如果我看到modelstate错误,它给出了MyModelID的错误,它在MyModel类中,请仔细阅读我的答案。如果您有
MyModel.MyModelID
的隐藏输入,并且您没有包含
MyModel.Forename
MyModel.nam姓氏
的隐藏输入,则
ModelState
将无效