【发布时间】:2020-05-10 23:25:09
【问题描述】:
我有两个模型类
public class Item
{
public string Name;
public SubItem SubObject { get; set; }
}
public class SubItem
{
public int Age { get; set; }
public string Work { get; set; }
}
从我的代码中我有类似的东西
public IActionResult ViewAndSend()
{
Item item = new Item
{
Name = "MyName",
SubObject = new SubItem
{
Age = 29,
Work = "Microsoft and google"
},
};
return View(item);
}
我的ViewAndSend.cshtml 看起来像这样
@model TestNavigation.Models.Item
<h2>ViewAndSend example</h2>
<p>@(String.Format("{0} {1}", "Name", Model.Name))</p>
<p>@(String.Format("{0} {1}", "Age", Model.SubObject.Age))</p>
<p>@(String.Format("{0} {1}", "Work", Model.SubObject.Work))</p>
@using (Html.BeginForm("SendSubItem", "Home", FormMethod.Post))
{
@Html.HiddenFor(m => m.SubObject.Age)
@Html.HiddenFor(m => m.SubObject.Work)
<input type="submit" value="Next" />
}
我的SendSubItem 方法如下所示
[HttpPost]
public IActionResult SendSubItem(SubItem subItem)
{
int age = subItem.Age; //age is 0
var work = subItem.Work; // work is null
return View();
}
ViewAndSend.cshtml 打印正确的值。然而,SendSubItem 方法获取一个对象,其中 0 为 Age,Work 为 null。
谁能解释我做错了什么?
【问题讨论】:
-
尝试使用
[FromBody]属性。public IActionResult SendSubItem([FromBody] SubItem subItem) -
没有按照你的建议工作
-
使用输入隐藏的 html 标记与您的字段名称的确切值作为名称
-
更好的方法是使用 Ajax 为您回发表单,您可以创建自定义对象以传递给方法
-
并回答您的问题,将数据作为查询字符串发送,它将起作用
标签: asp.net asp.net-mvc asp.net-core asp.net-core-mvc