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"/>
}