我有一个反馈表单的应用程序,由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>
我有一个控制器方法,应该从我的表单
接收DTORoute("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正常工作),它就可以工作。
是否可以禁止'消息'一词,或者我应该将其报告为错误?
答案 0 :(得分:0)
这不是MVC的错误,只是由于您的操作方法所采用的message
参数与Message
表单字段之间存在冲突。这使得默认模型绑定器混乱。您可以编写自己的自定义模型绑定器,但正如您已经想到的那样,重命名操作方法参数或表单字段要容易得多。