【问题标题】:Can not pass the model back to controller from view in ASP.NET MVC. Model is null when received无法将模型从 ASP.NET MVC 中的视图传递回控制器。收到时模型为空
【发布时间】: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 为 AgeWork 为 null。

谁能解释我做错了什么?

【问题讨论】:

  • 尝试使用[FromBody] 属性。 public IActionResult SendSubItem([FromBody] SubItem subItem)
  • 没有按照你的建议工作
  • 使用输入隐藏的 html 标记与您的字段名称的确切值作为名称
  • 更好的方法是使用 Ajax 为您回发表单,您可以创建自定义对象以传递给方法
  • 并回答您的问题,将数据作为查询字符串发送,它将起作用

标签: asp.net asp.net-mvc asp.net-core asp.net-core-mvc


【解决方案1】:

你应该使用 Item 作为接收类型。

[HttpPost]
public IActionResult SendSubItem(Item item)
{
    int age = item.SubObject.Age; 
    var work = item.SubObject.Work; 
    return View();
}

【讨论】:

  • 表单只回发内部对象@mj1313
  • 您的解决方案有效。是否可以从视图向控制器发送另一种类型,例如仅 SubObject?
  • 是的,你可以使用 Html.hidden 并在 SubItem 中设置它的名称:@Html.Hidden("Age", Model.SubObject.Age) @Html.Hidden("Work ", 模型.SubObject.Work)
猜你喜欢
  • 1970-01-01
  • 2021-02-24
  • 2010-11-25
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
相关资源
最近更新 更多