简言之:页面model跟后台model同名 mvc解析错误 后台model无法识别 改名即可
1、问题现象
POST提交时,控制的Action接收到的参数为null,但Request.Form、Request.Params等集合其实是包含提交的所有数据的。如下截图:
2、该问题很诡异,重新创建视图、控制器,问题仍然存在;
3、确定控制器肯定是没有问题后,决定首先将视图中的内容清空,发现可以正常接受到参数;
4、每次增加一个HTML元素,加到Model时,发现接收不到参数;
5、确定问题:当Action中的参数名称与提交的数据KEY有相同时(不区分大小写),会导致Action接收不到参数,只能得到null,估计是MVC在分析参数时的BUG。
6、视图代码
此视图中包括Id、Field1、Name、Model4个表单数据,那么Action的参数名称为此4个中的任何一个时(不区分大小写),都会导致接收到的参数为null。
@model WebMvc1.Models.ProductInfo
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Create</title>
</head>
<body>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>ProductInfo</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
<label for="Field1">Id</label>
<div class="col-md-10">
<input id="Id" name="Id" type="text" />
</div>
</div>
<div class="form-group">
<label for="Field1">Field1</label>
<div class="col-md-10">
<input id="Field1" name="Field1" type="text" />
</div>
</div>
<div class="form-group">
<label for="Field1">Name</label>
<div class="col-md-10">
<input id="Name" name="Name" type="text" />
</div>
</div>
<div class="form-group">
<label for="Field1">Model</label>
<div class="col-md-10">
<input id="Model" name="Model" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
</body>
</html>
运行时视图效果如下:
7、控制器代码,参数名称为model,与视图中提交的数据有相同名称(Model)。
[HttpPost]
public ActionResult Create(ProductInfo model)
{
return View(model);
}
8、将Action中的参数名称改为不与Form中的数据相同的其他名称时,问题解决。如下图:
8、哪位大神如果有时间,可以跟踪一下MVC的源码,确定该问题的真正原因。
9、MVC4、MVC5都有此问题出现。
转自:https://www.cnblogs.com/sdfkfkd/p/Mvc_Controller_Parameter_Null.html