Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NETMVC在一个视图中显示多个模型_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

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