C# 详细信息操作在asp.net mvc 4中不起作用
我正在尝试使用asp.NETMVC4和EntityFramework6创建一个网站,用户可以通过单击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
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如果您试图循环它,因为它是空的,因为您没有初始化它