0

我在创建多个模型视图时遇到问题

我创建了 3 个模型,然后创建了一个多个模型:

public partial class DetailsModel
{
    public ANIME MyANIME { get; set; }
    public CHARACTER MyCHARACTER { get; set; }
    public ACTORS MyACTORS { get; set; }
}

之后,我在 Controller 中添加了几行:

    public ActionResult Details(int id)
    {
        DetailsModel myDetailsModel = new DetailsModel();
            return View(myDetailModel);
    }

在那个视图之后:

<div class="editor-label">
    @Html.LabelFor(model => model.MyANIME.TITLE_OR)
</div>
<div>
    @Html.DisplayFor(model => model.MyANIME.TITLE_OR)
</div>

但是当我启动它时,数据总是空的......有什么想法有什么问题吗?

4

2 回答 2

2

这将创建模型的一个实例:

DetailsModel myDetailsModel = new DetailsModel();

但是那个实例是由什么组成的?对于初学者,该模型内部的三个属性都是引用类型,因此它们都将默认为null反正。因此,在视图内,model.MyANIMEnull。您可以通过始终初始化属性(例如,在默认构造函数中)来修复该小部分:

public partial class DetailsModel
{
    public ANIME MyANIME { get; set; }
    public CHARACTER MyCHARACTER { get; set; }
    public ACTORS MyACTORS { get; set; }

    public DetailsModel()
    {
        MyANIME = new ANIME();
        MyCHARACTER = new CHARACTER();
        MyACTORS = new ACTORS();
    }
}

但这实际上也没有用有意义的数据填充它们。例如,如果TITLE_OR是 a ,那么即使在这种情况下仍将是(或者,充其量是一个空字符串)。stringmodel.MyANIME.TITLE_ORnull

无论您想在该页面上显示什么数据,您都需要从某个地方获取该数据并使用该数据填充模型。然后它将在页面上可用。例如,如果您在控制器中执行此操作,那么您将在页面上看到示例值:

DetailsModel myDetailsModel = new DetailsModel();
myDetailsModel.MyANIME = new ANIME();
myDetailsModel.MyANIME.TITLE_OR = "sample title";
return View(myDetailsModel);
于 2013-11-12T20:06:00.347 回答
0

我假设 classes ANIMECHARACTER并且ACTORS是您的 Entity Framework 上下文使用的实体。在这种情况下,请使用适当的大小写,帕斯卡大小写。

您必须使用正确的AnimeCharacter填充ViewModel Actors。仍然假设实体框架,您的控制器将如下所示:

public ActionResult Details(int id)
{
    using (var dbContext = new YourContext())
    {
        DetailsModel viewModel = new DetailsModel();

        viewModel.Anime = dbContext.Anime.FirstOrDefault(a => a.ID == id);
        viewModel.Character = dbContext.Characters.FirstOrDefault(a => a.ID == id);
        viewModel.Actors = dbContext.Actors.FirstOrDefault(a => a.ID == id);

        return View(viewModel);
    }
}

当然,您想更改每个实体的查询,您可能不想在视图中使用实体,并且应该将数据源注入控制器的构造函数中,但我想这就是您所追求的。

于 2013-11-12T20:16:17.803 回答