是名为Message forbidden的控制器方法的参数吗?

时间:2017-04-10 16:33:25

标签: asp.net-core asp.net-core-mvc

我有一个反馈表单的应用程序,由FeedbackController处理。

 @model ClientMessageDto
 ...
 ...    
    <form class="contact-form form-horizontal" asp-action="Enrol" asp-controller="Feedback" asp-anti-forgery="true">
            <div class="col-sm-6 col-sm-offset-3">
                <div class="form-group">
                    <label asp-for="Name"></label>
                    <input asp-for="Name" class="form-control">
                </div>
                <div class="form-group">
                    <label asp-for="Email"></label>
                    <input asp-for="Email" class="form-control">
                </div>
                <div class="form-group">
                    <label asp-for="Phone"></label>
                    <input asp-for="Phone" class="form-control">
                </div>
                <div class="form-group">
                    <label asp-for="Message"></label>
                    <textarea asp-for="Message" class="form-control" rows="2"></textarea>
                </div>
                <div class="form-group">
                    <button type="submit" name="submit" class="btn btn-primary btn-lg pull-right">
                                Send request
                    </button>
                </div>
            </div>
        </form>

我有一个控制器方法,应该从我的表单

接收DTO
Route("enrol")]
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Enrol([FromForm]ClientMessageDto message)
{
    if (ModelState.IsValid)
    {
       return RedirectToAction("Index", "Home", new {area = ""});
    }

    return View(clientMessage);
}

即使我使用[FromForm]属性,此方法也始终接收具有空字段的对象。 但是如果我将参数名称更改为除消息之外的任何内容(例如messageDto或clientMessage正常工作),它就可以工作。

是否可以禁止'消息'一词,或者我应该将其报告为错误?

1 个答案:

答案 0 :(得分:0)

这不是MVC的错误,只是由于您的操作方法所采用的message参数与Message表单字段之间存在冲突。这使得默认模型绑定器混乱。您可以编写自己的自定义模型绑定器,但正如您已经想到的那样,重命名操作方法参数或表单字段要容易得多。