C# 详细信息操作在asp.net mvc 4中不起作用

C# 详细信息操作在asp.net mvc 4中不起作用,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我正在尝试使用asp.NETMVC4和EntityFramework6创建一个网站,用户可以通过单击profile按钮查看他们的配置文件详细信息。但每次我尝试登录时,都会出现如下错误。如果我注释掉ProfileView部分,那么我可以登录。我的代码在下面 控制器 public ActionResult ProfileView(int UserId=0) { UserInfo profile = db.UserInfoes.Find(UserId); if (Session["UserBO

我正在尝试使用asp.NETMVC4和EntityFramework6创建一个网站,用户可以通过单击
profile
按钮查看他们的配置文件详细信息。但每次我尝试
登录
时,都会出现如下错误。如果我注释掉
ProfileView
部分,那么我可以登录。我的代码在下面

控制器

public ActionResult ProfileView(int UserId=0)
{
  UserInfo profile = db.UserInfoes.Find(UserId);
  if (Session["UserBOID"] != null)
  {
    return View(profile);
  }
  else
  {
    return RedirectToAction("Login");
  }
}
查看

@model ABCoLtd.Models.MkistatVsUserLogin
@if (@Session["UserBOID"] != null)
{
  <li>Welcome, <b>@Session["UserBOID"].ToString()</b></li>
  foreach(var item in Model)
  {
    <li><a class="btn btn-info" href="@Url.Action("ProfileView", "Home", new { UserId=item.UserId })" target="_blank"><b>Profile</b></a></li>
  }
}
@model ABCoLtd.Models.mkistavsuserlogin
@if(@Session[“UserBOID”!=null)
{
  • 欢迎光临,@Session[“UserBOID”].ToString()
  • foreach(模型中的var项目) {
  • } }
    在同一型号下使用不同表格的自定义型号

    public class MkistatVsUserLogin
    {
        public IEnumerable<UserInfo> UserInfo { get; set; }
        public IEnumerable<mkistat> mkistats { get; set; }
    }
    
    公共类MkistatVsUserLogin
    {
    公共IEnumerable用户信息{get;set;}
    公共IEnumerable mkistats{get;set;}
    }
    
    我的代码有问题吗?如果是这样,请给我一个解决方案,因为我非常需要这个帮助。谢谢你的帮助。Tnx

    更新

    错误

    public ActionResult ProfileView(int UserId=0)
    {
      UserInfo profile = db.UserInfoes.Find(UserId);
      if (Session["UserBOID"] != null)
      {
        return View(profile);
      }
      else
      {
        return RedirectToAction("Login");
      }
    }
    
    编译错误 描述:编译所需资源时出错 以满足此请求。请查看以下特定错误详细信息 并适当修改源代码

    编译器错误消息:CS1579:foreach语句无法对“ABCoLtd.Models.MkistatVsUserLogin”类型的变量进行操作,因为“ABCoLtd.Models.MkistatVsUserLogin”不包含“GetEnumerator”的公共定义

    源错误: 第37行:foreach(模型中的var项目)


    您只将一个对象从控制器传递到视图,所以若要在其上循环,则需要将其更改为集合

      UserInfo profile = db.UserInfoes.Find(UserId);//This is only one object
    

    Model
    更改为
    Model.UserInfo
    ,如:

     @model ABCoLtd.Models.MkistatVsUserLogin
     @if (@Session["UserBOID"] != null)
     {
        <li>Welcome, <b>@Session["UserBOID"].ToString()</b></li>
        foreach(var item in Model.UserInfo) <<---
        {
           <li><a class="btn btn-info" href="@Url.Action("ProfileView", "Home", new { UserId=item.UserId })" target="_blank"><b>Profile</b></a></li>
        }
     }
    
    @model ABCoLtd.Models.mkistavsuserlogin
    @if(@Session[“UserBOID”!=null)
    {
    
  • 欢迎光临,@Session[“UserBOID”].ToString()

  • foreach(Model.UserInfo中的var项)首先,您要传递要查看的UserInfo对象

    UserInfo profile = db.UserInfoes.Find(UserId);
    
    问题是您的视图需要MkistatVsUserLogin模型

    @model ABCoLtd.Models.MkistatVsUserLogin
    
    您必须传递mkistavsuserlogin对象以在ProfileView ActionResult中查看,并创建UserInfo列表,以便能够将对象添加到集合中

    public class MkistatVsUserLogin
    {
      public List<UserInfo> UserInfo { get; set; }
      public IEnumerable<mkistat> mkistats { get; set; }
    }
    
    public ActionResult ProfileView(int UserId=0)
    {
      UserInfo profile = db.UserInfoes.Find(UserId);
      MkistatVsUserLogin model = new MkistatVsUserLogin();
      model.UserInfo = new List<UserInfo>();
      model.UserInfo.Add(profile);
      if (Session["UserBOID"] != null)
      {
        return View(model);
      }
      else
      {
        return RedirectToAction("Login");
      }
    }
    
    公共类MkistatVsUserLogin
    {
    公共列表用户信息{get;set;}
    公共IEnumerable mkistats{get;set;}
    }
    公共操作结果概要视图(int UserId=0)
    {
    UserInfo profile=db.UserInfoes.Find(UserId);
    MkistatVsUserLogin模型=新的MkistatVsUserLogin();
    model.UserInfo=新列表();
    model.UserInfo.Add(profile);
    if(会话[“UserBOID”]!=null)
    {
    返回视图(模型);
    }
    其他的
    {
    返回重定向操作(“登录”);
    }
    }
    
    现在,第二个问题在您的视图中。您正在循环mkistavsuserlogin模型,您应该循环UserInfo集合

      foreach(var item in Model.UserInfo)
      {
        <li><a class="btn btn-info" href="@Url.Action("ProfileView", "Home", new { UserId=item.UserId })" target="_blank"><b>Profile</b></a></li>
      }
    
    foreach(Model.UserInfo中的变量项)
    {
    
  • }
    如果你真的愿意分享你得到的错误,那就太好了。发布错误详细信息的详细信息!但是你的返回类型是
    UserInfo
    到视图中,但是视图需要
    MkistatVsUserLogin
    。你需要更改其中一个(它们必须是相同的类型)请检查我的更新。您甚至还没有发布正确的代码,但很明显,如果视图是正确的,并且您的模型是
    mkistavsuserlogin
    ,那么它需要是
    foreach(model.UserInfo中的var项){…
    。然后用正确的代码编辑你的问题!!并学会设置问题的格式!!我完全按照你说的做了,现在我得到了这个错误,
    对象引用没有设置为对象的实例。
    然后
    用户信息
    空的
    。你需要初始化它(并在列表中添加一些值)!正如Stephen所说,通过在控制器中设置它来确保它不为null。我该怎么做?很抱歉,我是asp的新手。我建议您首先阅读一些关于MVC的内容,因为这些都是非常基本的内容。在控制器中,您构建视图模型,并将其传递给视图。在构建视图模型时,初始化您的用户信息实例,使其包含元素。如果我使用一个对象,那么我如何使用view重定向?您好,tnx为您提供帮助,但我仍然收到此错误,
    对象引用未设置为数据库表
    UserId
    中对象的实例被设置为VARCHAR(50)。这是错误的原因吗?如果是,解决方案是什么?您可以将UserId更改为int并进行检查。UserId应该是数据库中的主键,您应该将其定义为integer,但我必须将其设置为varchar。那么我应该在控制器中使用什么变量类型?在您的代码中,我看不到mkistats对象在哪里使用它。它可以抛出object ref如果您试图循环它,因为它是空的,因为您没有初始化它