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; }
}
我有这个viewmodel
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>
在我看来,我在隐藏字段中有MyModelID
,因为我的页面中有几个标签,我想保留id以传递给其他标签。
保存后,我需要隐藏字段中的MyModelID
。在这里,如果我点击保存,当它到达后期操作时,ModelState.IsValid
总是返回false。
我尝试删除隐藏的字段,它就像真的一样。你能帮我解决一下我在做错的事吗?我的实际需求是在一个页面中我有多个选项卡,主选项卡有一些基本的detials。当我在第一个选项卡上保存数据时,细节应该转到数据库,并且应该生成和id。当我点击其他选项卡时(使用ajax和jquery)应该传递给那些并且数据应该保存到表tab2
答案 0 :(得分:0)
ModelState
无效,因为您在视图中使用的数据模型包含2个属性(Forename
和Surname
),这些属性使用[Required]
属性修饰并且您拥有没有为他们发布值。
当您删除隐藏的输入时,DefaultModelBinder
会初始化MydatabaseVM
的新实例,但myMode
的值是默认值null
,因此没有任何内容验证
但是当您包含隐藏的输入时,会发布其值,这会强制DefaultModelBinder
初始化MyModel
的新实例并设置MyModelID
。所以现在验证了MyModel
的所有属性,并为其他2个属性添加了错误。
规则1:编辑数据时始终使用view models。在你的情况下它应该是
public class MydatabaseVM
{
public int MyModelID { get; set; }
public virtual Tab2 tab2 { get; set; }
}
并在视图中
@Html.HiddenFor( m=> m.MyModelID )