Asp.net核心模型未从表单绑定

问题描述 投票:14回答:8

我从第3侧静态页面(由Adobe Muse生成)捕获发布请求,并通过MVC操作处理它。

<form method="post" enctype="multipart/form-data">
   <input type="text" name="Name">
   ...
</form>

为空表格操作路由:

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

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

动作:

[HttpPost]
public void Index(EmailModel email)
{
   Debug.WriteLine("Sending email");
}

型号:

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; }
}

[Request.Form具有来自表单的所有值,但模型为空

[0] {[Name, Example]}
[1] {[Email, [email protected]]}
[2] {[Company, Hello]}
[3] {[Phone, Hello]}
[4] {[Additional, Hello]}
c# asp.net forms asp.net-core model-binding
8个回答
38
投票

请注意不要为动作参数指定与模型属性相同的名称,否则绑定器将尝试绑定到该参数而失败。

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

public class EmailModel{ public string Email { get; set; } }

将操作参数'电子邮件'更改为其他名称,它将按预期方式绑定。

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

3
投票

我不确定是否是同一情况,但是我遇到了同样的问题,没有任何东西真正适合我。我的问题是我的视图模型类中有一个名为Model的属性]

public string Model { get; set; }

当我将属性重命名为ModelName时,即使没有FromForm属性,一切仍然可以正常工作。

看起来像一些特殊的属性名称可能会给asp.net mvc模型绑定带来一些问题。

因此,我的建议是检查您的模型属性,并可能尝试一一重命名它们,以检查问题是否存在。

希望这会有所帮助。


0
投票

void


0
投票

我遇到了同样的问题该文档帮助我了解模型绑定https://docs.asp.net/en/latest/mvc/models/model-binding.html


0
投票

如果请求模型中的一个或多个属性未能绑定到请求模型上可接受的属性,也会发生此问题。


0
投票

我今天遇到了这个问题,尽管事后看来似乎很明显,只是以为我要补充一下,您需要确保要绑定的模型上Properties的访问修饰符正确。我在某些文件上具有public MyProperty { get; internal set; },并且它们不会绑定。删除了internal,它们工作正常。


0
投票

就我而言,我使用的是MVC 4.0约定来命名要发布的对象。例如,


0
投票

我遇到了这个问题,当我在基础模型上有多个构造器时,模型不会绑定:

© www.soinside.com 2019 - 2024. All rights reserved.