记录mvc model为null bug

简言之:页面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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值