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