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