Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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# ViewModel复杂对象从视图传递到控制器时返回null_C#_Asp.net Core - Fatal编程技术网

C# ViewModel复杂对象从视图传递到控制器时返回null

C# ViewModel复杂对象从视图传递到控制器时返回null,c#,asp.net-core,C#,Asp.net Core,我正在尝试将ViewModel从控制器传递到视图并返回。数据从控制器移动到视图,显示所有必要的字段。但是,在发送回数据时,字段值将消失 发送视图模型 public ActionResult Process() { MugshotImportProcessViewModel model = new MugshotImportProcessViewModel(); FooRecord query_one = _service.Quer

我正在尝试将ViewModel从控制器传递到视图并返回。数据从控制器移动到视图,显示所有必要的字段。但是,在发送回数据时,字段值将消失

发送视图模型

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),仍然没有正确返回。