Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将模型中的嵌套类提交给控制器_C#_Asp.net Mvc - Fatal编程技术网

C# 将模型中的嵌套类提交给控制器

C# 将模型中的嵌套类提交给控制器,c#,asp.net-mvc,C#,Asp.net Mvc,我正在尝试提交一个表单,其中包含一个嵌套类的模型。但是,当我将数据获取到控制器时,嵌套类具有空字段 型号: public class Person { public string Name { get; set; } public ExtraStuff Stuff { get; set; } = new ExtraStuff(); } public class ExtraStuff { public string Field1 { get; set

我正在尝试提交一个表单,其中包含一个嵌套类的模型。但是,当我将数据获取到控制器时,嵌套类具有空字段

型号:

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

    public ExtraStuff Stuff { get; set; } = new ExtraStuff();
 }

   public class ExtraStuff 
   {
    public string Field1 { get; set; }

    public string Field2 { get; set; }

  }
视图:

控制器:

   public ActionResult ActionName (Person data)
    {
      data.Name       //this is fine
      data.Stuff.Field1 //comes in empty
      data.Stuff.Field2 //comes in empty
    }

我想知道您是否正在进行一些自定义表单提交,因为所提供的代码似乎没有任何问题。如果您制作一个类似以下的表单,它应该可以工作:

@using (Html.BeginForm("ActionName", "MyController"))
{
    @Html.TextBoxFor(model => model.TopValue)
    @Html.TextBoxFor(model => model.Nested.SomeValue)
                
    <input type="submit" value="Submit"/>
}
@使用(Html.BeginForm(“ActionName”、“MyController”))
{
@Html.TextBoxFor(model=>model.TopValue)
@Html.TextBoxFor(model=>model.Nested.SomeValue)
}

举个例子。

控制器调用反序列化方法来解析响应。答案取决于所使用的反序列化方法。大多数情况下,响应是JSON(Java)或XML。Java反序列化方法不需要实例化,而xml需要实例化。在控制器中,请尝试
data.Stuff.Field1
——Person具有ExtraStuff类型的内容,而您尝试访问ExtraStuff而不是Stuff。另外,您的视图应该有
model.Stuff.Field1
。我更正了我的帖子。然而,这些字段仍然是空的。为什么它不能从表单中获取文本框内容?您需要在控制器中查找数据。内容,而不是数据。外部内容。此外,请使用F12开发工具的“网络”选项卡检查文章正文。您希望在有效负载中看到的数据是什么?如果是,它看起来是什么样子?如果POST有效负载中的这两个字段为空,那么问题不在控制器中。你知道吗,这是一个Ajax调用,我没有在Ajax代码中添加额外的字段。只有窗体和控制器。
@using (Html.BeginForm("ActionName", "MyController"))
{
    @Html.TextBoxFor(model => model.TopValue)
    @Html.TextBoxFor(model => model.Nested.SomeValue)
                
    <input type="submit" value="Submit"/>
}