C# ASP.NETMVC在一个视图中显示多个模型
我有两门课:C# ASP.NETMVC在一个视图中显示多个模型,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我有两门课: public class Kolobezka : IEntity1 { public virtual int Id { get; set; } public virtual int VelikostKola { get; set; } public virtual string Znacka { get; set; } public virtual string Stav { get; set; } public virtual string
public class Kolobezka : IEntity1
{
public virtual int Id { get; set; }
public virtual int VelikostKola { get; set; }
public virtual string Znacka { get; set; }
public virtual string Stav { get; set; }
public virtual string Description { get; set; }
public virtual Kategorie_kolobezek Kategorie { get; set; }
public virtual int Dostupnost { get; set; }
}
public class Rezervace : IEntity1
{
public virtual int Id { get; set; }
public virtual Kolobezka Rez_kolobezky { get; set; }
[Required(ErrorMessage = "Jméno je požadováno!")]
public virtual string Jmeno { get; set; }
[Required(ErrorMessage = "Příjmení je požadováno!")]
public virtual string Prijmeni { get; set; }
[Required(ErrorMessage = "Datum začátku rezervace je požadováno!")]
public virtual DateTime Datum_od { get; set; }
[Required(ErrorMessage = "Datum konce rezervace je požadováno!")]
public virtual DateTime Datum_do { get; set; }
public virtual string Popis { get; set; }
}
因此,我需要在一个名为Index的视图中使用这两个类中的两个IList,因为:
@foreach (Kolobezka k in Model)
{
foreach (Rezervace r1 in r)
{
if(k.Id == r1.Rez_kolobezky.Id && r1.Datum_od < DateTime.Now && r1.Datum_do > DateTime.Now)
{
k.Dostupnost = 1;
}
}
if (k.Dostupnost == 0)
{
<tr class="bg-danger">
<td>
@Ajax.ActionLink(k.Id.ToString(), "Detail", new { id = k.Id },
new AjaxOptions() { UpdateTargetId = "modalContent",
InsertionMode = InsertionMode.Replace, OnBegin = "openModalWindow" })
</td>
<td>@k.VelikostKola</td>
<td>@k.Znacka</td>
<td>@k.Kategorie.Nazev</td>
<td>@k.Stav</td>
</tr>
}
@foreach(Kolobezka k模型)
{
foreach(r中的Rezervace r1)
{
如果(k.Id==r1.Rez_kolobezky.Id&&r1.Datum_odDateTime.Now)
{
k、 Dostupnost=1;
}
}
如果(k.Dostupnost==0)
{
@ActionLink(k.Id.ToString(),“Detail”,新的{Id=k.Id},
新的AjaxOptions(){UpdateTargetId=“modalContent”,
InsertionMode=InsertionMode.Replace,OnBegin=“openModalWindow”})
@k、 维利科斯科拉
@k、 兹纳卡
@k、 卡特戈里,纳泽夫
@k、 斯塔夫
}
我应该写谁来代替在第二个foreach中的r。
索引视图的开头如下所示:
@using ClassLibrary1.Model
@model IList<Kolobezka>
@{
ViewBag.Title = "Index";
}
@使用ClassLibrary1.Model
@模型IList
@{
ViewBag.Title=“Index”;
}
非常感谢。我认为您不需要两个模型。下面没有使用任何HTML标记,为什么需要在视图中执行此操作。您必须在controller中执行此操作,并将Kolobezka列表传递给视图
foreach (Rezervace r1 in r)
{
if(k.Id == r1.Rez_kolobezky.Id && r1.Datum_od < DateTime.Now && r1.Datum_do > DateTime.Now)
{
k.Dostupnost = 1;
}
}
创建另一个类,并创建所需类型的两个属性
public class Compound {
public Kolobezka foo {get; set;}
public Rezervace bar {get; set;}
}
然后可以像这样将此复合对象传递给视图
@model Compound
现在,您可以访问对象。如果需要,您还可以使用列表而不是单个对象。希望这有助于能够同时使用这两个模型,即Kolobezka和Rezervace,建议为此创建一个
视图模型
,该视图模型将具有这两个类的属性。例如:
public class KolobezkaRezervaceViewModel
{
public IEnumerable<Kolobezka> Kolobezkas { get; set; }
public IEnumerable<Rezervace> Rezervaces { get; set; }
}
现在你可以简单地在你的观点中使用它们,就像这样-
@foreach (Kolobezka k in Model.Kolobezkas)
…和
foreach (Rezervace r1 in Model.Rezervaces)
确保从控制器为模型正确填充值。为什么不创建一个类视图模型,然后在控制器上返回对象(在视图模型上创建),并在视图中生成控制器上返回的对象
@x.ViewModel.Name
除非我遗漏了什么,否则为什么您有
@model-IList
?它只允许您访问Kolobezka
列表,而不是Rezervace
,如果您没有为视图专门设计的类,该类可能包含IList
和IList
的两个属性,并且引用它类似于@mo删除您的新类
或通过Rezervace.Rez_kolobezky
属性访问Kolobezka
,如果它们应该按Kolobezka分组,则可能会使用GroupBy
?如果不是这样,我不明白为什么您要迭代Kolobezka
列表,并使用内部循环访问Rezervace
你的关系是经过设计的。我看到的唯一关系是Rezervace
类中的一个Kolobezka
。无论如何,如果你问如何将多个模型传递到一个视图中,有很多SO帖子都显示了这一点► 您可以发布控制器类的代码,并在修改后查看代码吗?属性需要数据类型。请参阅我的answer@It“satrap编辑,谢谢。很难在移动设备中键入:(C#public关键字以小“p”开头它对我不起作用…当我添加Model.Kolobezkas或Model.Rezervaces时它给我一个错误:IList不包含“Kolobezka”的定义,并且找不到接受IList类型的第一个参数的扩展Method Kolobezka(是否缺少使用方向或程序集引用的参数)使用ClassLibrary1.Model模型ClassLibrary1.Model.Parentmodel这是我在类开始时的代码now@pajasv:您不需要将视图绑定到@model-IList
。而是使用我们创建的新Viewmodel(使用类所在的命名空间)绑定视图。您可以参考一些教程来开始了解mvc的工作方式。@Yogi现在告诉我一个错误,即传入字典的模型项的类型为“System.Collections.Generic.List`1[ClassLibrary1.model.Kolobezka]”,但此字典需要“ClassLibrary1.model.Parentmodel”类型的模型项。
foreach (Rezervace r1 in Model.Rezervaces)
@x.ViewModel.Name