2013-12-15 94 views
2

查看ASP.Net MVC 「傳遞到字典的模型項的類型爲「System.Collections.Generic.List」

@using LearningMVCBLL; 
@model LearningMVC.Models.User 

@{ 
    ViewBag.Title = "CityDetails"; 
} 

<h2>CityDetails</h2> 
<table> 
    <thead> 
     <tr> 
      <th>ID</th> 
      <th>Value</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>City Name</td> 
      <td>@foreach (CityMaster city in @Model.GetCityDetails()) 
       { 
       @city.City_Name 
       } 
      </td> 
     </tr> 
     @* <tr> 
     <td></td> 
     <td></td> 
    </tr>*@ 
    </tbody> 
</table> 

控制器

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using LearningMVC.Models; 
using LearningMVCBLL; 

namespace LearningMVC.Controllers 
{ 
    public class UserController : Controller 
    { 
     // 
     // GET: /Index/ 

     public ActionResult CityDetails() 
     { 
      User User = new User(); 
      List<CityMaster> city = new List<CityMaster>(); 
      city = User.GetCityDetails(); 
      return View(city); 
     } 

    } 
} 

型號

using LearningMVCBLL; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace LearningMVC.Models 
{ 
    public class User 
    { 
     LearningMVCDataContext _dbContext = new LearningMVCDataContext(); 
     public List<CityMaster> GetCityDetails() 
     { 
      List<CityMaster> city = _dbContext.CityMasters.Where(c => c.City_ID == 2).ToList(); 
      return city; 
     } 
    } 

} 

我是新來的MVC請幫我解決這個問題。我得到的錯誤是「傳入字典的模型項目類型爲'System.Collections.Generic.List`1 [LearningMVCBLL.CityMaster]',但此字典需要一個類型爲'LearningMVC.Models.User'的模型項目「。

我正在使用LINQ從數據庫中獲取數據。請解釋我做錯了什麼,或者我完全錯了。

回答

2

在你有這樣的代碼,你的操作方法......

public ActionResult CityDetails() 
{ 
    User User = new User(); 
    List<CityMaster> city = new List<CityMaster>(); 
    city = User.GetCityDetails(); 
    return View (city); 
} 

您需要將其更改爲這個....

public ActionResult CityDetails() 
{ 
    User user = new User(); 
     return View(user); 
} 
+0

幫助 –

+0

我很高興謝謝!!!! – Leo

2

,如果你想有您可以使用獅子座的答案,用戶在視圖中。或者,你可能會改變看法: 更換模型

@model LearningMVC.Models.User 

@model List<CityMaster> 

而且在foreach取代

@foreach (CityMaster city in @Model.GetCityDetails()) 

@foreach (CityMaster city in Model) 
+0

工作完美感謝您的幫助 –

+0

@ManojSethi,我很樂意提供幫助。順便說一句,如果你想要和使用這個答案,爲什麼你標記不同的答案是最好的? – idlerboris

+0

我其實希望用戶在視圖中返回,但現在這兩個答案都適用於我,所以我標記了Leo的答案,因爲它給了我想實現的內容。我希望StackOverflow允許多個答案來標記正確。 –

2

雖然你已經有了一個答案,您可以更好地在控制器中構建所需的數據。

例子:

public class CityDetailsModel 
{ 
    public User User { get; set; } 
    public IEnumerable<Cities> { get; set; } 
} 


public class UserController : Controller 
{ 
    // 
    // GET: /Index/ 
    public ActionResult CityDetails() 
    { 
     CityDetailsModel model = new CityDetailsModel(); 
     model.User = new User(); 
     model.Cities = GetCityDetails(); 
     return View(model); 
    } 
} 

查看:

@using LearningMVCBLL; 
@model LearningMVC.Models.CityDetailsModel 
@{ 
    ViewBag.Title = "CityDetails"; 
} 
<h2>CityDetails</h2> 
<table> 
    <thead> 
     <tr> 
      <th>ID</th> 
      <th>Value</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>City Name</td> 
      <td> 
      @foreach (CityMaster city in @Model.Cities) 
      { 
       @city.City_Name 
      } 
      </td> 
     </tr> 
     @* <tr> 
     <td></td> 
     <td></td> 
    </tr>*@ 
    </tbody> 
</table> 
+0

謝謝Sivermind我認爲你的答案是幫助我創建更強大的類型視圖。我對嗎? @silvermind –

+0

@ManojSethi確實;)它可以幫助您防止視圖中使用方法混亂。調試還有一個額外的好處。從視圖調試到方法並不是真的很棒。不,你有優勢,當你得到關於邏輯的異常時,它發生在控制器中。 – Silvermind

+0

非常感謝我對MVC模式的瞭解。感謝您詳細解釋它。 –

相關問題