我在创建多个模型视图时遇到问题
我创建了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>
但是,当我启动它时,数据总是空的......任何想法有什么问题?
答案 0 :(得分:2)
这会创建模型的实例:
DetailsModel myDetailsModel = new DetailsModel();
但那个例子包括什么?对于初学者来说,该模型中的三个属性都是引用类型,因此无论如何它们都将默认为null
。因此,在视图中,model.MyANIME
为null
。您可以通过始终初始化属性来修复 小部分(例如,在默认构造函数中):
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
是string
,那么即使在这种情况下,model.MyANIME.TITLE_OR
仍然是null
(或者,最好是空字符串)。
无论您希望在该页面上显示什么数据,您都需要从某处获取该数据,并使用该数据填充模型。然后它将在页面上显示。例如,如果您在控制器中执行此操作,那么您将在页面上看到示例值:
DetailsModel myDetailsModel = new DetailsModel();
myDetailsModel.MyANIME = new ANIME();
myDetailsModel.MyANIME.TITLE_OR = "sample title";
return View(myDetailsModel);
答案 1 :(得分:0)
我认为类ANIME
,CHARACTER
和ACTORS
是您的实体框架上下文使用的实体。在这种情况下,请use proper casing,pascal案例。
您必须使用正确的Anime
,Character
和Actors
填充ViewModel。仍然假设实体框架,您的控制器将看起来像这样:
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);
}
}
当然你想要改变每个实体的查询,你可能不想在你的视图中使用实体,而数据源应该注入控制器的构造函数中,但我想这就是你的'重新开始。