为什么我的视图总是期望1个特定的视图模型?

时间:2017-02-16 06:28:45

标签: c# asp.net-mvc entity-framework viewmodel viewcontroller

似乎这个问题已在本网站上被问及并提出了很多答案,但我仍然无法解决我的问题。我收到传入字典的模型项目是' X',但是这个字典需要一个类型为' Y'的模型项目。错误,即使我非常确定我的代码指向正确的位置并接收正确的viewModel。

查看(索引)

@model EveryNationRandburg.ViewModels.AllUsers

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Church Members</h2>

<p>@Html.ActionLink("New Member", "Register", "Account", null, new { @class = "btn btn-primary" })</p>

<table class="table table-bordered table-hover" id="kerkmembers">
    <thead>
    <tr>
        <th>Member</th>
        <th>Email</th>
        <th>Contact Number</th>
    </tr>
    </thead>
    <tbody>
    @foreach (var member in Model.AlleKerkMembers)
    {
        <tr>
            <td>@Html.ActionLink(@member.UserName, "Edit", "KerkMember", new {id = @member.Id}, null)</td>
            <td>@member.Email</td>
            <td>@member.PhoneNumber</td>
        </tr>
    }
    </tbody>
</table>


@section scripts
{
    <script>
        $(document).ready(function (){
            $("#kerkmembers").DataTable();
        })
    </script>
}

视图模型

public class AllUsers
{
    public List<ApplicationUser> AlleKerkMembers = new List<ApplicationUser>();
}

帐户控制器

public ActionResult Index()
{
    var viewModel = new AllUsers
    {
        AlleKerkMembers = _context.Users.ToList()
    };
    return View(viewModel);
}

栈跟踪

  

InvalidOperationException:传递到字典中的模型项的类型为&#39; EveryNationRandburg.ViewModels.AllUsers&#39;,但此字典需要类型为&#39; EveryNationRandburg.ViewModels.KonnekGroepViewModel&#39;的模型项。

我的问题略有不同的是,每当我尝试将viewModel发送到视图时,我总是会收到错误消息,说它正在预期类型为&#39; Y&#39; (总是同一个,无论我在我的视图顶部声明什么模型)

1 个答案:

答案 0 :(得分:0)

我建议的第一件事是将调试器附加到您的代码中并查看您正在处理的值。使用调试器,您可以看到我们无法在此处看到的调用堆栈。

您在哪里使用return View(viewModel);的结果?

您没有列出视图的构建器列表。

您的视图期望的对象类型是什么? 应该是AllUsers,因为您将AllUsers对象传递给它。

您可以尝试使用显式类型而不是var来确保传递正确的对象类型。代码也更容易阅读。

请附上您的调试器并尝试以这种方式解决。