簡體   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