C# 控制器后置动作不';t接收模式

C# 控制器后置动作不';t接收模式,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,非常基本的模型: 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!

非常基本的模型:

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>
}
当屏幕加载时,值将正确绑定到页面。但当我按下submit按钮时,person对象的age和name都是空值

因为我使用了Html.TextBoxFor,它不应该正确设置所有绑定,并且对象应该自动绑定回POST吗?它一下子就粘好了


我是否在调用Html.BeginForm()时遗漏了什么

为什么您的模型是
Get
方法中的
对象?这可能是混淆模型绑定器的原因。这也是为什么当您将页面加载更改为
EditorFor
s时,页面加载会引发异常的原因

请尝试键入以下内容:

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

必须在模型中创建属性

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仅绑定属性。

您是否尝试过使用
EditorFor
而不是
TextBoxFor
?另外,请检查请求中的内容。在调试EditorFor的post methodsetting时,当我尝试加载页面行时,表单在第3行出现未处理的NullReferenceException=(键入tModel=ViewData.ModelMetadata.ContainerType.GetProperty(ViewData.ModelMetadata.PropertyName).PropertyType;)打开源代码视图,在id或名称为“name”和“Age”的页面中查找其他输入。有时您会意外地使用相同名称的其他输入,而MVC无法绑定,因为请求使用值创建了一个集合。我只是检查了一下,没有重复的输入标记。我确实发布了所有代码,我只是尝试获得一个简单的工作示例。我刚刚更改了它,但它仍然对EditorFor.with Text给出了异常BoxFor,它仍然不能绑定到帖子上,但它可以绑定到下一页的GET,所以我认为从一个对象到另一个人的改变并不重要
public class Person
{
    public string Name;
    public int Age;
}