繁体   English   中英

详细操作在ASP.NET MVC 4中不起作用

[英]Details action not working in asp.net mvc 4

我正在尝试使用asp.net mvc 4和实体框架6创建一个网站,通过单击“ Profile按钮,用户可以查看其个人资料详细信息。 但是每次我尝试Login ,都会出现如下错误。 如果我注释掉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>
  }
}

自定义模型以在同一模型下使用不同的表

public class MkistatVsUserLogin
{
    public IEnumerable<UserInfo> UserInfo { get; set; }
    public IEnumerable<mkistat> mkistats { get; set; }
}

我的代码有问题吗? 如果是这样,请给我一个解决方案,因为我非常需要此帮助。 您的帮助将不胜感激。 TNX。

更新

错误

编译错误描述:在编译为满足此请求所需的资源期间发生错误。 请查看以下特定的错误详细信息,并适当地修改您的源代码。

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

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

您仅将一个对象从控制器传递给视图,因此如果要在其上循环,则需要将其更改为collection。

  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.UserInfo ,而不是视图模型本身。

首先,您要传递UserInfo对象进行查看

UserInfo profile = db.UserInfoes.Find(UserId);

问题是您的视图需要MkistatVsUserLogin模型

@model ABCoLtd.Models.MkistatVsUserLogin

您必须传递MkistatVsUserLogin对象以在ProfileView ActionResult中查看,并使UserInfo List能够将对象添加到集合中。

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模型,应该循环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>
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM