嗨!我尝试学习Asp.net MVC.i创建了一个示例应用程序来学习它。但按f5返回服务器错误。我哪里犯了错误?问题出在哪儿?有一个导航栏Home / About / Product。如果我按产品,错误会返回给我。
Cotroller:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication1.Models.Db;
namespace MvcApplication1.Controllers
{
public class ProductsController : Controller
{
//
// GET: /Products/
public ActionResult GetAll()
{
using (var ctx = new MyDbEntities())
{
ViewData["Products"] = ctx.Products;
return View();
}
}
}
}
查看:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.Db.Product>" %>
<%@ Import Namespace="MvcApplication1.Models.Db" %>
<%@ Import Namespace="MvcApplication1.Controllers" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
ProductDetail
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>ProductDetail</h2>
<ul>
<% foreach (var m in (IEnumerable<Products>)ViewData["Products"])
{ %>
<li><%= m.ProductName %></li>
<% } %>
</ul>
</asp:Content>
的Site.Master:
<div id="menucontainer">
<ul id="menu">
<li><%: Html.ActionLink("Home", "Index", "Home")%></li>
<li><%: Html.ActionLink("About", "About", "Home")%></li>
<li><%: Html.ActionLink("Product", "ProductDetail", "Product")%></li>
</ul>
</div>
答案 0 :(得分:3)
<%: Html.ActionLink("Product", "ProductDetail", "Product")%>
操作名称ProductDetail不在您的控制器中,您具有GetAll操作名称
你需要 public ActionResult ProductDetail()
{
using (var db = new NorthwindEntities())
{
return View(db.Products.ToList());
}
}
答案 1 :(得分:2)
您能提供更多信息,例如实际的服务器错误吗?
快速查看代码视图名称错误。 转到/ Products /期望一个名为Products的视图而不是产品详细信息。
答案 2 :(得分:1)
Controller名称和View文件夹名称不匹配。也在Action名称和View名称之间。
产品控制器 - &gt; 产品视图中的文件夹
GetAll 操作 - &gt; ProductDetail.aspx 查看
重命名为:
产品控制器 - &gt;视图中的产品文件夹
ProductDetail 操作 - &gt; ProductDetail.aspx查看
另外,请记下这一行:
ViewData["Products"] = ctx.Products;
像这样:
ViewData["Products"] = ctx.Products.ToList();
您的观点不应该是对数据库的调用。
答案 3 :(得分:0)
假设您正在进行默认路由。
问题是您的控制器名为ProductsController
(复数)。将名称更改为ProductController
或将视图文件夹的名称更改为Products
。
另一个问题是您的Controller不包含ActionMethod ProductDetail
,
指向site.Master
ProductController.ProductDetail
中的链接
醇>
如果您想学习Asp.NET Mvc,我建议您查看以下教程。
希望这会有所帮助
答案 4 :(得分:0)
首先,尝试更具体。你得到什么错误?
现在,我想我看到了问题所在,但我只是在猜测,因为你没有发布错误。对于我所看到的,您将传递给IQueryable视图:ctx.Products
而不枚举它。
然后视图尝试枚举它,但是上下文被释放,因此查询无法运行。我猜你得到的错误就像“上下文不可用”或类似的东西。
首先,尝试更改这样的语句:ctx.Products.ToList()
并查看错误是否消失。
我发现你使用字典的另一件事是,使用强类型的ViewModel会好得多(或者至少使用动态)。
答案 5 :(得分:0)
如果您未指定视图名称,则应用程序将查找具有您的方法名称的视图。即:
public ActionResult GetAll()
{
using (var ctx = new MyDbEntities())
{
ViewData["Products"] = ctx.Products;
return View();
}
}
正在寻找一个视图“Product / GetAll.aspx”。解决方案:
return View("ProductDetail");