首页 > 解决方案 > 如果通过 javascript 将destinationId 设置为0,则ModelState.IsValid 返回true,否则返回false

问题描述

public class InventoryEventViewModel{
      public int DestinationId { get; set; }
      public int EventType { get; set; }
}

[HttpPost]
 [ValidateAntiForgeryToken]
 public ActionResult Save(InventoryEventViewModel viewModel)
 {
           //added a breakpoint here

            if (!ModelState.IsValid)
            {
             //do something
             }
}

在剃刀视图中

<select name="DestinationId" id="DestinationId">
<option>Select Destination</option>
<option value="1">A</option>
<option value="2">B</option>
</select>

$('#DestinationId').val(@Model.DestinationId)-> 返回 0

DestinationId 是 int 类型,因此其默认值为 0,当我提交表单时,我在 ActionResult 行下方添加了一个断点以查看 viewModel 内容,我发现 viewModel.DestinationId 为 0 因此ModelState.IsValid返回true。但是,如果我删除此行$('#DestinationId').val(@Model.DestinationId)$('#DestinationId')则默认值为空白,但在我的断点视图中,Model.DestinationId 仍为 0 但ModelState.IsValid返回false,我开始认为这ModelState实际上并不是指viewModel. 那么两者是什么关系呢?

标签: asp.net-mvc

解决方案


推荐阅读