我在创建多模型视图时遇到了问题
我创建了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>但当我启动时数据总是空的..。有什么不对吗?
发布于 2013-11-12 20:16:17
我假设类ANIME、CHARACTER和ACTORS是实体框架上下文使用的实体。请使用合适的套管,pascal在这个案子里。
您必须在ViewModel中填充适当的Anime、Character和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-12 20:06:00
这将创建模型的一个实例:
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);https://stackoverflow.com/questions/19938747
复制相似问题