2010-07-06 115 views
0

的我有是強類型的視圖asp.net MVC視圖和我有一個控制器,它返回 根據提供的ID與IList用戶。我收到以下錯誤信息:asp.net MVC模型項的類型是List

傳遞到字典中的模型項類型爲'System.Collections.Generic.List`1 [Data.User]',但該字典需要一個類型爲' Data.User」。

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Data.User>" %> 
<% using (Html.BeginForm()) 
{%> <%= Html.ValidationSummary(true) %>    
<fieldset> 

<legend>Fields</legend>     
       <div class="editor-label"> 
        <%= Html.LabelFor(model => model.Id) %> 
       </div> 
       <div class="editor-field"> 
        <%= Html.TextBoxFor(model => model.Id) %> 
        <%= Html.ValidationMessageFor(model => model.Id) %> 
       </div>     
       <div class="editor-label"> 
        <%= Html.LabelFor(model => model.UserName) %> 
       </div> 
       <div class="editor-field"> 
        <%= Html.TextBoxFor(model => model.UserName) %> 
        <%= Html.ValidationMessageFor(model => model.UserName) %> 
       </div> 

       <div class="editor-label"> 
        <%= Html.LabelFor(model => model.Email) %> 
       </div> 
       <div class="editor-field"> 
        <%= Html.TextBoxFor(model => model.Email) %> 
        <%= Html.ValidationMessageFor(model => model.Email) %>  

    public ActionResult EditUser(int id) 
      { 

        var usr = _UsrService.GerUserById(id).ToList<User>();     
        return View(usr); 
      } 
+0

我編輯了你的帖子,從控制器與視圖分離。如果刪除了兩個代碼塊之間的文本(我只是寫了「控制器」),它看起來像一個單一的代碼塊(這看起來很奇怪) – 2010-07-06 18:42:48

+0

還,這是一個錯字? 'GerUserById'應該不會是'GetUserById' – 2010-07-06 18:46:04

回答

1

您可以在列表中未傳遞到一個模式是顯示一個項目。

嘗試刪除.ToList<User>,使其看起來像

Data.User usr = _UsrService.GetUserById(id).FirstOrDefault; 
return View(usr) 
+0

它仍然給出了同樣的錯誤 – Pinu 2010-07-06 18:43:20

+0

看到我的編輯.... – 2010-07-06 18:46:37

+0

也,我改變了例子,說'GetUserById',而不是'GerUserById',因爲它看起來就像你有一個在你原來的帖子中輸入錯字。 – 2010-07-06 18:48:18

0

你強類型的視圖類的Data.User一個實例。您的操作方法試圖通過交給List<User>來創建視圖。

因爲它看起來像你只是想顯示單個用戶,請嘗試更改您的操作方法,只得到一個用戶,像這樣:

public ActionResult EditUser(int id) 
{ 

    var usr = _UsrService.GerUserById(id).FirstOrDefault();     
    return View(usr); 
} 

我假設GerUserById(id)方法返回一個IEnumerable因爲您正在調用ToList<>方法。這意味着,即使是一個項目的清單,你仍然需要獲得對象出來,因此調用FirstOrDefault()會給你在IEnumerable的第一個結果。

0

假設系統中只有一個用戶具有給定ID(這是ID的定義),_UsrService.GerUserById(id)應更改爲返回User而不是List<User>。然後你的控制器可以說:

return View(_UsrService.GetUserById(id)); 
相關問題