aspx不能从它继承的aspx.cs中获取manber

时间:2018-06-05 13:00:15

标签: c# asp.net

这些代码是本书中的一些例子' pro asp.net 4.5' Adam freeman,Matthew MacDonald,Mario Szpuszta撰写。

我创建了一个新项目并按照本书编写了一些代码。上次我完成了List.aspx页面,它运行得很好。但是下次我打开这个项目并尝试打开这个页面时,这些错误突然出现了。在其他页面中也有一些错误。

这些是错误代码

enter image description here

如您所见,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 {
    }
}

1 个答案:

答案 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项目时多次发现这个问题。非常恼火,因为如果输入很多代码就很难找到错误。希望微软可以尽快适应它。