首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC多模型

MVC多模型
EN

Stack Overflow用户
提问于 2013-11-12 19:59:50
回答 2查看 95关注 0票数 0

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

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

代码语言:javascript
复制
public partial class DetailsModel
{
    public ANIME MyANIME { get; set; }
    public CHARACTER MyCHARACTER { get; set; }
    public ACTORS MyACTORS { get; set; }
}

之后,我向Controller添加了行:

代码语言:javascript
复制
    public ActionResult Details(int id)
    {
        DetailsModel myDetailsModel = new DetailsModel();
            return View(myDetailModel);
    }

在此之后:

代码语言:javascript
复制
<div class="editor-label">
    @Html.LabelFor(model => model.MyANIME.TITLE_OR)
</div>
<div>
    @Html.DisplayFor(model => model.MyANIME.TITLE_OR)
</div>

但当我启动时数据总是空的..。有什么不对吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-12 20:16:17

我假设类ANIMECHARACTERACTORS是实体框架上下文使用的实体。请使用合适的套管,pascal在这个案子里。

您必须在ViewModel中填充适当的AnimeCharacterActors。仍然假设实体框架,您的控制器将如下所示:

代码语言:javascript
复制
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);
    }
}

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

票数 0
EN

Stack Overflow用户

发布于 2013-11-12 20:06:00

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

代码语言:javascript
复制
DetailsModel myDetailsModel = new DetailsModel();

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

代码语言:javascript
复制
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_ORstring,那么即使在本例中,model.MyANIME.TITLE_OR仍将是null (或者充其量是空字符串)。

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

代码语言:javascript
复制
DetailsModel myDetailsModel = new DetailsModel();
myDetailsModel.MyANIME = new ANIME();
myDetailsModel.MyANIME.TITLE_OR = "sample title";
return View(myDetailsModel);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19938747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档