【问题标题】:ASP.NET MVC2 Application showing Error in ViewASP.NET MVC2 应用程序在视图中显示错误
【发布时间】:2014-02-26 10:08:32
【问题描述】:

控制器-

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循环视图中。

实际上我正在尝试在这里创建一个用 VB 构建的应用程序的 C# 版本。

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

【问题讨论】:

标签: c# asp.net sql vb.net linq


【解决方案1】:

正如错误消息所示,您不能在查询语句中创建映射实体。您可以选择现有实体:

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);

,取决于您的要求。

【讨论】:

  • 我尝试以这种方式添加,但它显示编译时错误,提示“当前上下文中不存在名称 't'”。我将此代码添加到我的控制器方法 Index()。
  • 可能是因为 t 是 Linq 语句的一部分。请问还有什么好办法吗?
  • 我的错误,错过了编辑那部分。现已更新,您可以使用最新代码重试。
  • 非常感谢。异常消失了。 :) 从早上起我就一直在努力解决这个问题,因为我是新手。但是,我仍然面临一个问题,视图仍然没有根据我在视图中添加的 foreach 循环显示任务名称字符串。你能帮忙吗?
  • 哦,好吧...我会在某个时候将其添加为新问题。希望你也一样,我有机会再次接受答案。
【解决方案2】:

您可能需要转换为类似列表,

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();

【讨论】:

  • 我尝试使用此语句,它显示的异常与我的代码中显示的相同。
  • 还有其他建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 2019-07-30
  • 2011-05-31
相关资源
最近更新 更多