我正在获得在Visual Studio 2008上开发的旧.NET Web应用程序的支持.但是我使用的是Visual Web Developer 2010 Express.我已经将项目代码直接从最后一个工作版本加载为Web应用程序. Everything编译并加载设置以定位.NET Framework 3.5版.
但是,在调试时,请求的第一个页面会在消息中出现“编译错误”
“*CS1061: ‘ASP.site_master’ does not contain a definition for ‘LinkButton2_Click’ and no extension method ‘LinkButton2_Click’ accepting a first argument of type ‘ASP.site_master’ could be found (are you missing a using directive or an assembly reference?)*”.
以下是相关的代码详细信息:
来自Site.Master:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.Master.cs" %>
...
<asp:LoginView ID="LoginView1" runat="server" >
<AnonymousTemplate>
<asp:LinkButton ID="LinkButton2" runat="server" Click="LinkButton2_Click"> Login
</asp:LinkButton>
</AnonymousTemplate>
来自Site.Master.cs:
public partial class Site : BaseMasterPage // BaseMasterPage is subclass of System.Web.UI.MasterPage
...
public void LinkButton2_Click(object sender, EventArgs e)
{
Response.Redirect("/Login.aspx?ReturnURL="+ Request.Url.AbsolutePath);
}
显然,代码已定义,并且没有明显的拼写错误.
我主要是一名Java开发人员,但对.NET有着丰富的经验.然而,这个问题让我感到难过,所以我需要一些帮助来浏览它.我已经通过谷歌进行了广泛的研究,这种类型的问题已被多次报道,包括Stack Overflow.但是,之前报告中给出的所有决议都没有帮助我解决这个问题.这是非常令人费解的,因为代码显然可以正常运行,因为它目前正在生产中运行.它似乎是Visual Studio 2008和Visual Web Developer 2010 Express之间的版本问题.
最佳答案 在您的主声明中添加一个Inherits =“Site”属性.这可以允许它与代码隐藏文件正确连接.
Site.Master.aspx:
<%@ Master Language="C#" Inherits="<full namespace>.Site" CodeBehind="Site.Master.cs" AutoEventWireup="true" %>
必须在Site.Master.cs中的位置