2014-02-26 20 views
1

控制器 -ASP.NET MVC2應用程序顯示的錯誤

namespace TaskList.Controllers 
{ 
    public class HomeController : Controller 
    { 
    // 
    // GET: /Home/ 
    private TaskListDataContext DB = new TaskListDataContext(); 

    //Task tasks = new Task(); 
    //Display a list of Tasks 
    public ActionResult Index() 
    { 
     var tasks = from t in DB.Tasks 
        orderby t.EntryDate descending 
        select new TaskList.Models.Task() 
        { 
         Id = t.Id, 
         Task1 = t.Task1, 
         IsCompleted = t.IsCompleted, 
         EntryDate = t.EntryDate 
        }; 
     return View(tasks); 
     } 

     //Display a form for creating a new Task 
     public ActionResult Create() 
     { 
     return View(); 
     } 

     //Adding a new task to the database 
     public ActionResult CreateNew(string tasktext) 
     { 
     //Add the new task to the database 
     Task newTask = new Task(); 
     newTask.Task1 = tasktext; 
     newTask.IsCompleted = false; 
     newTask.EntryDate = DateTime.Now;  
     DB.Tasks.InsertOnSubmit(newTask); 
     DB.SubmitChanges();  
     return RedirectToAction("Index"); 
     } 

     //Mark a task as complete 
     public ActionResult Complete() 
     { 
     //Database Logic 
     return RedirectToAction("Index"); 
     } 
    } 
} 

查看:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<IEnumerable<TaskList.Models.Task>>"%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <div>  
     <h1>My Tasks</h1> 
     <ul> 
     <% foreach (TaskList.Models.Task task in ViewData.Model) 
      {%>    
      <li> 
      <% task.Task1.ToString(); %> 
      </li>  
     <% } %> 
     </ul>  
     <br /> <br /> 
     <a href='<%=Url.Action("Create")%>/filename'>Add my Tasks</a> 
    </div> 
</body> 
</html> 

模型使用LINQ講座

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Tasks")] 
public partial class Task : INotifyPropertyChanging, INotifyPropertyChanged 
{ 
    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);  
    private int _Id;   
    private string _Task1;   
    private bool _IsCompleted;  
    private System.DateTime _EntryDate;  
} 

當我試圖運行作出該應用程序顯示我的錯誤

「不允許在查詢 中顯式構造實體類型'TaskList.Models.Task'。」

在foreach循環中。

其實我試圖創建一個C#veriosn在VB中建立的應用程序在這裏。

http://www.asp.net/mvc/videos/mvc-2/how-do-i/creating-a-tasklist-application-with-aspnet-mvc

+0

我認爲這可以幫助你http://stackoverflow.com/a/7362796/1239554 – shanish

+0

http://stackoverflow.com/questions/787296/explicit-construction-of-entity-type-in​​-query-is -not-allowed – ema

+0

非常感謝,但錯誤得到糾正,使用har07的解決方案,你可以請幫助我這個「視圖仍然沒有顯示任務名字符串按照我已經在視圖中添加的foreach循環」 – aroraarjita

回答

0

由於錯誤信息顯示,你不能在查詢語句創建映射實體。您可以選擇現有的實體:

var tasks = from t in DB.Tasks 
      orderby t.EntryDate descending 
      select t; 

,或外部查詢中創建新的實體的名單:

var taskEntities = from t in DB.Tasks 
        orderby t.EntryDate descending 
        select t; 
var tasks = new List<TaskList.Models.Task>(); 
foreach(var taskEntity in taskEntities) 
{ 
    tasks.Add(new TaskList.Models.Task() 
       { 
        Id = taskEntity.Id, 
        Task1 = taskEntity.Task1, 
        IsCompleted = taskEntity.IsCompleted, 
        EntryDate = taskEntity.EntryDate 
       }); 
} 
return View(tasks); 

,根據您的要求。

+0

我嘗試以這種方式添加,但它顯示編譯時錯誤,說「名稱't'不存在於當前上下文中」。我將此代碼添加到我的Controller方法Index()中。 – aroraarjita

+0

可能是因爲t是Linq陳述的一部分。請任何其他想法? – aroraarjita

+0

我的錯誤,錯過了編輯該部分。它現在已經更新,你可以用最新的代碼再試一次。 – har07

0

您可能需要轉換列出一樣,

var tasks = (from t in DB.Tasks orderby t.EntryDate descending select new TaskList.Models.Task() { Id = t.Id, Task1 = t.Task1, IsCompleted = t.IsCompleted, EntryDate = t.EntryDate }).ToList(); 
+0

我試着用這個說法它顯示出與我在代碼中顯示的相同的異常。 – aroraarjita

+0

有其他建議嗎? – aroraarjita