asp.net-mvc - 如果通过 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
. 那么两者是什么关系呢?
解决方案
推荐阅读
- javascript - 修复了导航栏和正文滚动在 IOS 上损坏的问题
- c# - 如何使用 LINQ 更新列表中的项目
- python-3.x - 数据库还原错误:“存档中没有名为 'dump.sql' 的项目”
- f# - F# Canopy:可以从报告中排除测试吗?
- c# - 编码的用户界面测试在不同 PC 上的行为不同
- amazon-web-services - 扩展 AWS Kinesis 流并提高消费者端的性能
- java - Mockito - 父(抽象)类中的模拟值?
- ionic2 - 如何将浮动标签应用于具有禁用选项的 ionic2 下拉菜单?
- jquery - 如何在数据表中为分页添加光标手
- jenkins - Sonarqube 错误必须提供“projectUuid”或“projectKey”