2017-08-29 82 views
1

我有问题,我很难跳过它。使用Razor MVC在正常模型中播放的IEnumerable模型使用Razor MVC

在我_Layout.cshtml我使用的IEnumerable型号:

<div class="wpisDodatki"> 
    @foreach (var item in Model) 
    { 
     <div> @Html.DisplayFor(modelItem => item.Dzien)</div> 
    } 
    <p>test<br />test<br />test</p> 
</div> 

在主网页Index.cshtml我使用模式:使用该模型看起来像

@model IEnumerable<DluzynaSzkola.Models.Aktualnosci> 

迭代

@model DluzynaSzkola.Models.User 

当用_Layout加载时,试图使用2个模型,什么是禁止的。

我正在尝试2种类似的方法来解决它。

第一次尝试: 创建包含裹模型类:

namespace DluzynaSzkola.Models 
{ 
    public class Wrap 
    { 
     public IEnumerable<Aktualnosci> Wpisy { get; set; } 
     public DluzynaSzkola.Models.User UserData { get; set; } 
    } 
} 

加入控制器动作:

public ActionResult Aktualnosci() 
     { 
      var Wrap = new Wrap(); 
      Wrap.Wpisy = db.Indeks; 
      return View(Wrap); 
     } 
    } 

创建的部分文件:含_Dodatki.cshtml:

@model IEnumerable<DluzynaSzkola.Models.Aktualnosci> 

<div class="wpisDodatki"> 
    @foreach (var item in Model) 
    { 
     <div> @Html.DisplayFor(modelItem => item.Dzien)</div> 
    } 
    <p>test<br />test<br />test</p> 
</div> 

通话部分在_Layout.cshtml中:

<div>@Html.Partial("_Dodatki", Model.Wpisy) 

使用模型_layout:

@model DluzynaSzkola.Models.Wrap 

这让我异常:

传递到字典的模型项的类型为“System.Collections.Generic.List`1 [ DluzynaSzkola.Models.Aktualnosci]',但是这个词典需要一个'DluzynaSzkola.Models.Wrap'类型的模型项目。

第二次尝试:在控制器 创建行动:

public PartialViewResult Load() 
     { 
      return PartialView("~/Views/Aktualnosci/_Dodatki.cshtml"); 
     } 
    } 

有部分文件_Dodatki。CSHTML:

@model IEnumerable<DluzynaSzkola.Models.Aktualnosci> 

<div class="wpisDodatki"> 
    @foreach (var item in Model) 
    { 
     <div> @Html.DisplayFor(modelItem => item.Dzien)</div> 
    } 
    <p>test<br />test<br />test</p> 
</div> 

,并呼吁在布局文件:

@Html.Partial("~/Views/Aktualnosci/_Dodatki.cshtml") 

这让我异常:

System.NullReferenceException 

在部分文件:

Row5:  @foreach (var item in Model) 

第三尝试:

调用部分有:

@Html.Partial("~/Views/Aktualnosci/_Dodatki.cshtml", new List<DluzynaSzkola.Models.Aktualnosci>() 

给了我在渲染视图没有迭代。

部分视图与前面的示例类似。

我不知道如何处理正常的IEnumerable模型。

+0

检查您是否没有具有相同名称的另一个部分,错误是说您的部分应该接收包裹模型类。或者存在另一个部分,或者错误不是加载部分,而是加载视图中的其他组件。 –

+0

负面的,只有1个部分。 –

+0

因为您没有将模型传递给视图(因此它的'null')。使用'@ Html.Action()'调用填充集合的服务器方法,然后返回你的局部视图。布局不应该包含'@ model'声明,除非它的基本视图模型来自使用该布局的所有其他视图派生的基础视图模型。 –

回答

0

你是否试图为你的视图创建一个模型来包装你的IEnumerable和你的用户?

public class Wrap 
{ 
    public IEnumerable<Aktualnosci> Wpisy { get; set; } 
    public DluzynaSzkola.Models.User UserData { get; set; } 
} 

当你说“在我的主页上”,你的意思是_Layout?

+0

感谢您的反馈意见。不幸的是,我与用户封装有相同的例外。 –

+0

你可以向我解释为什么你需要在你的_Layout中使用viewModel? – CERVERA

+0

好点,我编辑了我的问题。我的模型被称为:'@model DluzynaSzkola.Models.Wrap'。附:通过“在我的主页”我的意思是指数。cshtml –