【问题标题】:@Html.Partial return: The model item passed into the dictionary is of type __ but this dictionary requires a model item of type __@Html.Partial 返回:传入字典的模型项是 __ 类型,但此字典需要 __ 类型的模型项
【发布时间】:2012-10-18 01:40:49
【问题描述】:

我正在尝试向我的 MVC4 Web 应用程序添加部分视图,但收到以下异常:

传入字典的模型项的类型为“...Meeting”,但此字典需要类型为“System.Collections.Generic.List`1[...UserProfile]”的模型项。

到目前为止我做了什么:

  1. 我在控制器中添加了这个功能:
public PartialViewResult GetUsers()
        {
            var usersList = (from users in db.Users select users).ToList();
            return PartialView(usersList);
        }
  1. 我添加了部分视图:
@model List<UserProfile>
@{
 <select id="Meeting_SetToUser" name="Meeting.SetToUser">
        @foreach (var item in Model)
        {
            <option value="@item.UserId">@item.FirstName @item.LastName</option>
        }
    </select>
}
  1. 我从我的角度调用了部分视图:
@Html.Partial("GetUsers")

你能告诉我我做错了什么吗?

谢谢!

【问题讨论】:

  • 我的 partialView 类型是 List 我还检查了我的控制器的方法,并将相同的类型发送到 partialView。
  • @Shlo,但你在哪里调用 GetUsers 操作?
  • 我猜这种方式永远不会像您在这里回答的那样被调用...更改为 Action 解决了问题。下次我也会尝试一个断点,看看我是否达到了方法。谢谢。
  • 我的意思是PartialView所属的View。你永远不会调用你的 Action。使用@Html.Partial("GetUsers") 行,您只需渲染 PartialView 并将 View 的模型传递给它,而不是 List&lt;UserProfile&gt;
  • 谢谢@Zabavsky 我理解我的问题。我切换到行动。

标签: c# asp.net-mvc entity-framework razor partial-views


【解决方案1】:

当您使用Html.Partial 时,似乎从未调用过GetUsers 操作。也许您想使用子操作:

@Html.Action("GetUsers")

查看following article 以更好地了解Html.PartialHtml.Action 之间的区别。

同时使用foreach 循环而不是使用Html.DropDownList 帮助器来生成下拉列表似乎很不合适。也许你想使用这个助手,不是吗:

@model List<...UserProfile>
@Html.DropDown(
    "Meeting.SetToUser", 
    new SelectList(
        Model.Select(x => new 
        { 
            UserId = x.UserId, 
            FullName = string.Format("{0} {1}", x.FirstName, x.LastName) }
        ),
        "UserId", 
        "FullName"
   )
)

我也强烈建议您使用视图模型,而不是将您的域模型传递给视图。

【讨论】:

  • 谢谢达林!我将 Html.Partial 更改为 Html.Action 并且它有效。我会阅读你提供的文章。我欣赏你的笔记并将考虑到它们。谢谢。
【解决方案2】:

仔细查看 GetUsers() 操作,您正在将 List 类型的模型传递给局部视图,其中局部视图接受 List<...userprofile> 类型。

解决方案是发送部分视图接受的正确类型。

【讨论】:

    猜你喜欢
    • 2020-09-08
    • 2022-01-16
    • 2015-09-19
    • 2013-10-17
    • 2023-03-30
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    相关资源
    最近更新 更多