当前位置: 首页 > 知识库问答 >
问题:

Asp。Net MVC演员阵容模型

柳杰
2023-03-14

我有三个模型:动物、狗和猫。

类动物

public class Animal
{
    
}

班犬

public class Dog : Animal
{
    
}

还有班猫

public class Dog : Animal
{
    
}

另外有两个控制器(DogController和CatController),在每个控制器中,都有一个索引操作返回视图以显示列表结果。

狗控制器

public class DogController : Controller
{
   public DogController ()
   {       
   }
   public async Task<IActionResult> Index()
   { 
      DogRepository IRepos = new DogRepository ();
      // Get List of Dogs
      IList<Animal> listDogs= await IRepos.GetListDogs();            
      return View(ilIst);
   } 

   [Httpost]
   public async Task<IActionResult> Add(Animal Dog)
   { 
      ....
      // Add dog to Database
                  
      return RedirectToAction("Index");
   } 


}

狗的索引视图

@model IEnumerable<Dog> 

@{
    ViewData["Title"] = "Index";
}
<div class="row">
    <div class="table-responsive">
        <table class="table">           
            </thead>
            <tbody>
                @foreach (var item in Model)
                {
                    <tr>
                        <td>
                            @Html.DisplayFor(modelItem => item.Dog_ID)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.Dog_Name)
                        </td>
                    </tr>
                }
        </table>
    </div>
</div>

在狗控制器的索引Action中,返回类型为IList

处理请求时发生未经处理的异常。InvalidOperationException:传递到ViewDataDictionary的模型项的类型为“System”。收藏。通用的List1[Animal]”,但此ViewDataDictionary实例需要“System”类型的模型项。收藏。通用的IEnumerable1[Dog]'。

因此,将控制器中的操作发送的动物列表转换为视图中模型的狗类型列表非常重要。在视图中,@model IEnumerable as IEnumerable不起作用,我们如何将动物列表转换为狗列表。

同样的事情,在动作后,我们如何将狗模型从视图投射到动作中的动物模型


共有1个答案

商绍元
2023-03-14

多态性似乎不适用于页面模型。可以为Cat和Dog定义局部视图,为局部视图使用子类,并将基类用作主视图的模型。

主视图(索引):

@model IEnumerable<Animal>

@{
    ViewData["Title"] = "Index";
}

<div class="row">
    <div class="table-responsive">
        <table class="table">
            <thead>
            </thead>
            <tbody>
                @foreach (var item in Model)
                {
                    @if (item is Dog)
                    {
                        <partial name="_DogPartial" model="item" />
                    }
                }
        </table>
    </div>
</div>

局部视图(_DogPartial):

@model Dog
<tr>
    <td>
        @Html.DisplayFor(modelItem => Model.Dog_ID)
    </td>
    <td>
        @Html.DisplayFor(modelItem => Model.Dog_Name)
    </td>
</tr>
 类似资料:
  • 我们正在开发具有移动部分和网络用户界面的应用程序。Web UI使用角,我们在后端配置cors时遇到了问题。我们的代码如下(只是对我们的问题很重要的代码): 从stackoverflow上的文档和其他帖子来看,这应该是可行的,但不是。我们错过了什么? thnx 编辑: 这是邮递员的请求: 卷曲'https://guw.azurewebsites.net/api/token'-X OPTIONS-H'

  • 虽然Visual Studio和Visual Studio Code MVC模板附带了一些客户端包,如jQuery、jQueryValide、bootstrap等。bower.json和. Bowerrc文件完全丢失,所以当我进入VS bowers包管理器时,我看不到已经安装的包这是相当烦人。 问题是这在两周前开始发生在我身上(大约在我尝试npm package manager并进行VS代码更新时

  • 我一直在搜索这个主题,但没有找到我想要的。基本上,我开始用UML的所有东西,用例,类图来计划一个项目。然后我们决定使用ASP。NET MVC。该应用程序是一种O-Desk或Elance 我有用户,承包商,公司,主持人和管理员。 我有点困惑模型应该如何表示这个用户,以及如何使用asp设置权限和角色。net mvc特性。 在一个正常的应用程序中,我会为他们每个人都创建一个类,他们可能会扩展User,其

  • 我从这里得到上面的错误消息: 特别是从第二行。。进口是 akka版本是2.2.1,scala是2.10.2,我正在使用sbt 0.13来构建它。 编辑:我用 结果如下:

  • 让我们假设一个使用Akka Typed实现的应用程序有一个持久执行元。这个持久执行元作为其操作的一部分创建了瞬态(或非持久)子执行元,每个子执行元都有一个唯一的ID,这些ID是持久状态的一部分。持久执行元还需要一些与其子级通信的方式,但我们不希望持久化子级的,因为它们实际上不是状态的一部分。在恢复时,持久参与者应该基于恢复的状态重新创建它的子级。这听起来并不像是一个很不寻常的用例,我正在试图弄清楚

  • 我经常发现自己使用一个“主”角色,为子任务创建许多子角色。当子任务完成时,主角也应该停止自己。所以当时,我观察子角色并停止主角色context.children.is。 我经常使用这种模式,但因为我从未读过这方面的文章。我不确定,这是一个好主意还是失败的演员有问题。。。? 我已经读过Akka 2中的关机模式,但是这种方法在Java中似乎比我的解决方案更复杂? 以下是我针对具有两个子任务的主要参与者