[英]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.