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
将无效