这些代码是本书中的一些例子' pro asp.net 4.5' Adam freeman,Matthew MacDonald,Mario Szpuszta撰写。
我创建了一个新项目并按照本书编写了一些代码。上次我完成了List.aspx页面,它运行得很好。但是下次我打开这个项目并尝试打开这个页面时,这些错误突然出现了。在其他页面中也有一些错误。
这些是错误代码
如您所见,Listing.aspx无法获得MaxPage'和'当前页'来自Listing.aspx.cs,尽管这两个变量已经在Listing.aspx.cs中声明,并且它们是公共的。并且我已经检查了类名和命名空间,它们没有问题。
实际上' MaxPage'可以喜欢新的SportsStore.Pages.Listing()。MaxPage'。看起来List.aspx似乎没有继承Listing.aspx.c。然后我检查了'的.csproj'文件,似乎没问题。
<ItemGroup>
<None Include="packages.config" />
<Content Include="Controls\CategoryList.ascx" />
<Content Include="Pages\CartView.aspx" />
<Content Include="Pages\Listing.aspx" />
<Content Include="Pages\Store.Master" />
<None Include="Web.Debug.config">
<DependentUpon>Web.config</DependentUpon>
</None>
<None Include="Web.Release.config">
<DependentUpon>Web.config</DependentUpon>
</None>
</ItemGroup>
...
<Compile Include="Pages\Listing.aspx.cs">
<DependentUpon>Listing.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="Pages\Listing.aspx.designer.cs">
<DependentUpon>Listing.aspx</DependentUpon>
</Compile>
然后我甚至尝试重新创建整个项目,逐个重新创建每个页面,但错误仍然存在。
此处&#39; re文件属于此页面。包括Listing.aspx,Listing.aspx.cs,Listing.aspx.designer.cs。
Listing.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Listing.aspx.cs" Inherits="SportsStore.Pages.Listing" MasterPageFile="~/Pages/Store.Master" %>
<%@ Import Namespace="System.Web.Routing" %>
<asp:Content ContentPlaceHolderID="bodyContent" runat="server">
<div id="content">
<%--<%
foreach (SportsStore.Models.Product prod in GetProducts())
{
Response.Write("<div class='item'>");
Response.Write(string.Format("<h3>{0}</h3>", prod.Name));
Response.Write(prod.Description);
Response.Write(string.Format("<h4>{0:c}</h4>", prod.Price));
Response.Write(string.Format("<button name='add' type='submit' value='{0}'>Add to Cart</button>", prod.ProductID));
Response.Write("</div>");
}
%>--%>
<asp:Repeater ItemType="SportsStore.Models.Product" SelectMethod="GetProducts" runat="server">
<ItemTemplate>
<div class='item'>
<h3><%# Item.Name %></h3>
<%# Item.Description %>
<h4><%# Item.Price.ToString("c") %></h4>
<button name='add' type='submit' value='<%# Item.ProductID %>'>Add to Cart</button>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
<div class="pager">
<% for (int i = 1; i <= MaxPage; i++)
{
//Response.Write(string.Format("<a href='/Pages/Listing.aspx?page={0}' class='selected'>{0}</a>", i));
string selectedCategory = (string)RouteData.Values["category"] ?? Request.QueryString["category"];
RouteValueDictionary routeValueDic = new RouteValueDictionary() { { "page", i } };
if (selectedCategory != null)
{
routeValueDic.Add("category", selectedCategory);
}
string path = RouteTable.Routes.GetVirtualPath(null, null, routeValueDic).VirtualPath;
Response.Write(string.Format("<a href='{0}' {1}>{2}</a>", path, i == CurrentPage ? "class='selected'" : "", i));
}
%>
</div>
</asp:Content>
Listing.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Routing;
using System.Web.UI;
using System.Web.UI.WebControls;
using SportsStore.Models;
using SportsStore.Models.Repository;
using SportsStore.Pages.Helpers;
namespace SportsStore.Pages
{
public partial class Listing : System.Web.UI.Page
{
private Repository myRepository = new Repository();
private int pageSize = 4;
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
if (int.TryParse(Request.Form["add"], out int selectedProductId))
{
Product selectedProduct = myRepository.Products.Where(p => p.ProductID == selectedProductId).FirstOrDefault();
if (selectedProduct != null)
{
SessionHelper.GetCart(Session).AddItem(selectedProduct, 1);
SessionHelper.Set(Session, SessionKey.RETURN_URL, Request.RawUrl);
Response.Redirect(RouteTable.Routes.GetVirtualPath(null, "cart", null).VirtualPath);
}
}
}
}
public IEnumerable<Product> GetProducts()
{
return FilterProducts().OrderBy(prod => prod.Price).Skip((CurrentPage - 1) * pageSize).Take(pageSize);
}
public int CurrentPage
{
get
{
//int page = int.TryParse(Request.QueryString["page"], out page) ? page : 1;
int page = GetPageFromRequest();
return page > MaxPage ? MaxPage : page;
}
}
public int MaxPage
{
get
{
return (int)Math.Ceiling((decimal)FilterProducts().Count() / pageSize);
}
}
private IEnumerable<Product> FilterProducts()
{
string selectedCategory = (string)RouteData.Values["category"] ?? Request.QueryString["category"];
return selectedCategory == null ? myRepository.Products : myRepository.Products.Where(x => x.Category == selectedCategory);
}
private int GetPageFromRequest()
{
int page;
string reqValue = (string)RouteData.Values["page"] ?? Request.QueryString["page"];
return reqValue != null && int.TryParse(reqValue, out page) ? page : 1;
}
}
}
Listing.aspx.designer.cs
namespace SportsStore.Pages {
public partial class Listing {
}
}
答案 0 :(得分:0)
我已经发现了真正的错误。 我受到了另一个关于stackoverflow的问题的启发。因此,我在错误列表中选择Build Only而不是Build + IntelliSense。然后,这些名称不存在&#39;错误消失了,我看到了这些代码的另一个错误点
代码图片链接:error code
我没有权利发布图片,所以请打开此链接。或者您可以看到我放在下面的代码
if (int.TryParse(Request.Form["add"], out int selectedProductId))
{
Product selectedProduct = myRepository.Products.Where(p => p.ProductID == selectedProductId).FirstOrDefault();
if (selectedProduct != null)
{
SessionHelper.GetCart(Session).AddItem(selectedProduct, 1);
SessionHelper.Set(Session, SessionKey.RETURN_URL, Request.RawUrl);
Response.Redirect(RouteTable.Routes.GetVirtualPath(null, "cart", null).VirtualPath);
}
}
如你所见,变量selectedProductId在if()内部被内联声明。但我在{}内部使用它。虽然它实际上只在声明成功时使用,但vs2017仍然认为这是一个错误。我想也许vs2017没有考虑到这一点。
我说项目上次工作得很好,因为我在&#39;之前宣布了变量selectedProductId。而且我做了那个改变,因为vs2017提供了优化代码的提示。我只是点击了按钮,我没有想太多关闭项目,所以下次我打开这个项目时,它没有用。
有时vs会显示一些不是真正错误的错误。真正的错误发生在那些错误之前,但vs无法找到它们。我在做asp项目时多次发现这个问题。非常恼火,因为如果输入很多代码就很难找到错误。希望微软可以尽快适应它。