控制器开机自检操作未接收模型

本文关键字:模型 开机自检 操作 控制器 | 更新日期: 2023-09-27 17:55:38

非常基本的模型:

public class Person
{
    public string Name;
    public int Age;
}

和非常简单的视图:

@model DynWebPOC.Models.Person
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
Hello, @Model.Name
<br/>
You're getting old at @Model.Age years old now!
@using(Html.BeginForm("Index","Test",FormMethod.Post))
{
    <fieldset>       
        <label for="name" style="color: whitesmoke">Name:</label>    
        @Html.TextBoxFor(m => m.Name)
        <br/>
        <label for="age" style="color: whitesmoke">Age:</label>
        @Html.TextBoxFor(m => m.Age)
        <br/>
        <input type="submit" value="Submit"/>
    </fieldset>
}

还有一个非常简单的控制器:

public class TestController : Controller
{
    [HttpGet]
    public ActionResult Index()
    {
        object model = new Person {Name = "foo", Age = 44};
        return View(model);
    }

   [HttpPost]
   public ActionResult Index(Person person)
   {
       return View();
   }
}

当屏幕加载时,值会正确绑定到页面。但是当我按下提交按钮时,person 对象具有年龄和名称的所有空值。

因为我使用了 Html.TextBoxFor,它不应该正确设置所有绑定并且对象应该自动绑定回 POST 吗?它在 GET 中绑定得很好。

我在调用 Html.BeginForm() 时是否遗漏了某些内容?

控制器开机自检操作未接收模型

必须在模型中创建属性

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

而不是

public class Person
{
    public string Name;
    public int Age;
}

ASP.net MVC 仅绑定属性。

为什么您的模型是Get方法中的object?这可能是使模型绑定器感到困惑的原因。这也看起来像为什么当您将它们更改为 EditorFor s 时它会在页面加载时引发异常

尝试强输入:

[HttpGet]
public ActionResult Index()
{
    Person model = new Person {Name = "foo", Age = 44};
    return View(model);
}