MVC5的控制器,使用HttpPost方式时,接收的参数为null的原因


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都有此问题出现。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM