C# ViewModel复杂对象从视图传递到控制器时返回null
我正在尝试将ViewModel从控制器传递到视图并返回。数据从控制器移动到视图,显示所有必要的字段。但是,在发送回数据时,字段值将消失 发送视图模型C# ViewModel复杂对象从视图传递到控制器时返回null,c#,asp.net-core,C#,Asp.net Core,我正在尝试将ViewModel从控制器传递到视图并返回。数据从控制器移动到视图,显示所有必要的字段。但是,在发送回数据时,字段值将消失 发送视图模型 public ActionResult Process() { MugshotImportProcessViewModel model = new MugshotImportProcessViewModel(); FooRecord query_one = _service.Quer
public ActionResult Process()
{
MugshotImportProcessViewModel model = new MugshotImportProcessViewModel();
FooRecord query_one = _service.QueryFooRecord(abc);
BarRecord query_two = _service.QueryBarRecord(xyz);
model.recordA = query_one;
model.recordB = query_two;
model.testNum = 42;
return View(model);
}
@model Foo.ViewModels.MugshotImport.MugshotImportProcessViewModel
...
// Display some HTML data
...
@using (Html.BeginForm("AddRecord", "MugshotImport", FormMethod.Post))
{
@Html.HiddenFor(x => x.recordA)
@Html.HiddenFor(x => x.recordB)
@Html.HiddenFor(x => x.testNum)
<input type="submit" class="btn btn-primary" value="submit"/>
}
使用视图模型,然后返回视图
public ActionResult Process()
{
MugshotImportProcessViewModel model = new MugshotImportProcessViewModel();
FooRecord query_one = _service.QueryFooRecord(abc);
BarRecord query_two = _service.QueryBarRecord(xyz);
model.recordA = query_one;
model.recordB = query_two;
model.testNum = 42;
return View(model);
}
@model Foo.ViewModels.MugshotImport.MugshotImportProcessViewModel
...
// Display some HTML data
...
@using (Html.BeginForm("AddRecord", "MugshotImport", FormMethod.Post))
{
@Html.HiddenFor(x => x.recordA)
@Html.HiddenFor(x => x.recordB)
@Html.HiddenFor(x => x.testNum)
<input type="submit" class="btn btn-primary" value="submit"/>
}
模型本身没有返回null,但每当我尝试引用returnVal.recordA.foo
或returnVal.recordB.bar
时,我都会收到一个null引用异常
如果我删除这两个函数并简单地请求returnVal.testNum,它将返回testNum为0
如何才能将值正确返回控制器?由于您没有提供
FooRecord
和barrecond
的结构,因此我将其自定义为以下内容
public class MugshotImportProcessViewModel
{
public FooRecord recordA { get; set; }
public BarRecord recordB { get; set; }
public int testNum { get; set; }
}
public class FooRecord
{
public int id { get; set; }
public string Name{ get; set; }
}
public class BarRecord
{
public int id { get; set; }
public string Name { get; set; }
}
因为它们不是简单的字段类型,而是一个实体
字段,所以在视图中使用隐藏控件时,需要分别存储它们的每个字段
@using (Html.BeginForm("AddRecord", "MugshotImport", FormMethod.Post))
{
@Html.HiddenFor(x => x.recordA.id)
@Html.HiddenFor(x => x.recordA.Name)
@Html.HiddenFor(x => x.recordB.id)
@Html.HiddenFor(x => x.recordB.Name)
@Html.HiddenFor(x => x.testNum)
<input type="submit" class="btn btn-primary" value="submit" />
}
@使用(Html.BeginForm(“AddRecord”、“mugshotport”、FormMethod.Post))
{
@Html.HiddenFor(x=>x.recordA.id)
@Html.HiddenFor(x=>x.recordA.Name)
@Html.HiddenFor(x=>x.recordB.id)
@Html.HiddenFor(x=>x.recordB.Name)
@Html.HiddenFor(x=>x.testNum)
}
以下是测试结果:
由于您没有提供
FooRecord
和barrecond
的结构,因此我对它们进行了如下定制
public class MugshotImportProcessViewModel
{
public FooRecord recordA { get; set; }
public BarRecord recordB { get; set; }
public int testNum { get; set; }
}
public class FooRecord
{
public int id { get; set; }
public string Name{ get; set; }
}
public class BarRecord
{
public int id { get; set; }
public string Name { get; set; }
}
因为它们不是简单的字段类型,而是一个实体
字段,所以在视图中使用隐藏控件时,需要分别存储它们的每个字段
@using (Html.BeginForm("AddRecord", "MugshotImport", FormMethod.Post))
{
@Html.HiddenFor(x => x.recordA.id)
@Html.HiddenFor(x => x.recordA.Name)
@Html.HiddenFor(x => x.recordB.id)
@Html.HiddenFor(x => x.recordB.Name)
@Html.HiddenFor(x => x.testNum)
<input type="submit" class="btn btn-primary" value="submit" />
}
@使用(Html.BeginForm(“AddRecord”、“mugshotport”、FormMethod.Post))
{
@Html.HiddenFor(x=>x.recordA.id)
@Html.HiddenFor(x=>x.recordA.Name)
@Html.HiddenFor(x=>x.recordB.id)
@Html.HiddenFor(x=>x.recordB.Name)
@Html.HiddenFor(x=>x.testNum)
}
以下是测试结果:
记录A和记录B的类型是什么?似乎不太可能出现由
HiddenFor
支持的复杂类型。HiddenFor不适用于非基元类型。您必须编写:@Html.HiddenFor(x=>x.recordA.foo)
,这将解释recordA和recordB没有正确返回,但testNum是一个基本类型(int),仍然没有正确返回。recordA和recordB的类型是什么?似乎不太可能出现由HiddenFor
支持的复杂类型。HiddenFor不适用于非基元类型。您必须编写:@Html.HiddenFor(x=>x.recordA.foo)
,这将解释recordA和recordB没有正确返回,但testNum是一个基本类型(int),仍然没有正确返回。