MVC传递模型,其中包含从控制器到视图的列表

时间:2018-03-24 17:25:58

标签: asp.net-mvc razor

将模型从Controller传递给View时遇到了一些问题。 模型是这样的:

public class ClassA
{
    public ClassA()
    {
        this.List1 = new List<ClassB>();
    }
    public int Value { get; set; }
    public List<ClassB> List1 { get; set; }
}

例如ClassB

public class ClassB
{
    public string something { get; set; }
}

在Controller中,我有

using CQC.Models;
using CQC.ViewModels;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity.Infrastructure;
using System.IO;
using System.Linq;
using System.Web.Mvc;
namespace CQC.Controllers
{
    public class SampleController : Controller
    {
        public ActionResult Xyz()
        {
            ClassA reg = new ClassA();
            reg.Value = 1;
            reg.List1.Add(new ClassB() { something = "aaa" });
            return View(reg);
        }
    }
}

return View(reg)之前调试和暂停我确认reg包含我想要的内容。 因此,在视图中(并使用@model CQC.ViewModels.ClassA),我可以看到Model.Value,但列表Model.List1为空。 拜托,我错过了什么? 视图是这样的:

@model CQC.ViewModels.ClassA
@{ ViewBag.Title = "abc"; }
<fieldset>
    <legend>Detail</legend>
    <div class="row">
        <div class="label">@Html.LabelFor(model => model.Value)</div>
        <div class="output">@Html.DisplayFor(model => model.Value)</div>
    </div>
    @if (Model.List1.Count > 0)
    {
        <div class="rowAutoHeight">
            <div class="label">@Html.Label("List1")</div>
            <table class="stripe hover" id="in_tbl1">
                <thead>
                    <tr>
                        <th>Programa</th>
                    </tr>
                </thead>
                <tbody>
                    @foreach (var item in Model.List1)
                    {
                        <tr>
                            <td>@Html.DisplayFor(modelItem => item.Something)</td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    }
</fieldset>

1 个答案:

答案 0 :(得分:0)

将ClassA模型类的定义更改为:

public class ClassA
{
    public ClassA()
    {
        this.List1 = new List<ClassB>();
    }

    public int Value { get; set; }
    public List<ClassB> List1 { get; set; }
}

在Controller中调用ClassA reg = new ClassA();时,会在创建ClassA实例时实例化一个新的List1,然后可以添加值。

所以这在View中应该得到一个结果:

<ul>
    @foreach (var item in Model.List1)
    {
        <li>@item.something</li>
    }
</ul>