Asp.net核心模型不受形式约束

Kov*_*xey 14 c# forms asp.net model-binding asp.net-core

我从第三方静态页面(由Adobe Muse生成)捕获发布请求并使用MVC操作处理它.

<form method="post" enctype="multipart/form-data">
   <input type="text" name="Name">
   ...
</form>
Run Code Online (Sandbox Code Playgroud)

路由空表单操作:

app.UseMvc(routes => routes.MapRoute(
   name: "default",
   template: "{controller=Home}/{action=Index}"));
Run Code Online (Sandbox Code Playgroud)

但是根据行动我有模型,每个属性都是空的

行动:

[HttpPost]
public void Index(EmailModel email)
{
   Debug.WriteLine("Sending email");
}
Run Code Online (Sandbox Code Playgroud)

模型:

public class EmailModel
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Company { get; set; }
    public string Phone { get; set; }
    public string Additional { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Request.Form 从表单中获取所有值,但模型为空

[0] {[Name, Example]}
[1] {[Email, Example@example.com]}
[2] {[Company, Hello]}
[3] {[Phone, Hello]}
[4] {[Additional, Hello]}
Run Code Online (Sandbox Code Playgroud)

Stu*_*art 37

注意不要为action参数指定与model属性相同的名称,否则binder将尝试绑定到参数并失败.

public async Task<IActionResult> Index( EmailModel email ){ ... }

public class EmailModel{ public string Email { get; set; } }
Run Code Online (Sandbox Code Playgroud)

将actions参数'email'更改为其他名称,它将按预期绑定.

public async Task<IActionResult> Index( EmailModel uniqueName ){ ... }
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我在我的视图模型中有一个名为"Model"的属性打破了绑定. (4认同)
  • 这让我节省了很多时间的头痛 (4认同)
  • 在这种情况下,似乎 ASP.NET Core 的模型绑定代码可能会抛出异常,从而给我们带来麻烦! (2认同)
  • 好吧,那是一个小时毫无意义的调试,我再也不会回来了。 (2认同)