无法从局部视图访问模型数据

时间:2017-12-13 17:05:03

标签: asp.net-mvc

我必须从控制器向部分视图显示一些数据。我已经将数据传递给局部视图,但无法从局部视图访问。我得到的错误实际上是说我错过了什么。请查看下面的图片以便更好地理解。如果你什么都不懂,问问题。

sample image

sample image

_UserNav.cshtml:

@model User
<h2>@Model.FirstName</h2>

_Layout.cshtml:

if (this.User.IsInRole("User"))
                {
                    //@Html.Partial("_UserNav");

                    @Html.Action("_UserNav", "Dashboard", new { id = "test@gmail.com" });
                }

控制器:

[ChildActionOnly]
        public PartialViewResult _UserNav(string id)
        {
            using (mydb db = new mydb())
            {
                Models.User user = db.Users.Where(x => x.Email == id).FirstOrDefault();
                return PartialView("_UserNav", user);
            }
        }

1 个答案:

答案 0 :(得分:0)

类型声明只需要完全限定。考虑一下代码文件如何在它们的顶部有这样的东西:

using SomeNamespace;
using SomeNamespace.AnotherNamespace;
// etc.

这些告诉编译器在哪里搜索您在该文件的代码中使用的特定类型名称。目前您的视图文件没有。如果您使用的是旧版本的MVC(我认为在5之前),那么您可以将这些指令添加到Views文件夹中的Web.config

<namespaces>
    <add namespace="SomeNamespace" />
    <add namespace="SomeNamespace.AnotherNamespace" />
    <!-- etc. -->
</namespaces>

对于更新的版本,你可以将指令放在视图中(至少,我很确定你可以):

@using SomeNamespace
@using SomeNamespace.AnotherNamespace

或者,在任何和所有版本的MVC / Razor / .NET / C#中,可能是最简单的方法,无论您只是完全符合该类型:

@model SomeNamespace.AnotherNamespace.User

如果我猜测您的实际命名空间可能是什么样子,它可能是这样的:

@model MvcApplication1.Models.User

但是,当然,您必须检查代码中的实际命名空间。