我的ascx页面:
<%@ Control Language="c#" Inherits="FSB.Layouts.Short_Home_Loan_Application" CodeBehind="Short Home Loan Application.ascx.cs" %>
<div class="form">
<form action="" method="post" rel="shortForm">
<div class="section">
<asp:panel id="shortForm_wrapper" runat="server">
this is the first panel
</asp:panel>
<asp:Panel runat="server" ID="thankYouWrapper" >this is the second panel</asp:Panel>
</div>
</form>
</div>
<sc:sublayout runat="server" path="~/layouts/FSB/Document Checklist Lightbox.ascx" id="checklist" />
我的CS页面
using System;
using Sitecore.Data.Items;
using Sitecore.Links;
using Sitecore.Data.Fields;
using Sitecore.Web.UI.WebControls;
using System.Net;
using FSB.Helpers;
using System.Configuration;
using System.Text;
using System.Web;
using System.Web.SessionState;
namespace FSB.Layouts {
public partial class Short_Home_Loan_Application : System.Web.UI.UserControl {
protected void Page_Load(object sender, EventArgs e) {
thankYouWrapper // not accessible here
}
}
}
注意:这是一个CMS项目并使用Sitecore。我实际上并不知道它有什么帮助。我对C#完全陌生,并且被扔进了大量的C#网站。
提前致谢
答案 0 :(得分:3)
我假设你有一个Web应用程序项目而不是WebSite项目。因此,在解决方案资源管理器中,导航到您的*.ascx
文件,展开它以查看C#代码隐藏,您还会看到*.ascx.designer.cs
文件。删除该“设计者”文件。接下来,右键单击*.ascx
文件,然后选择转换为Web应用程序,这将重新生成设计器文件。现在尝试通过C#访问控件。
答案 1 :(得分:0)
在ascx页眉中,修改您的Inherits指令,在后面的代码中包含Namespace前缀。
<强>修订强>
我已将原始标记发布为并将其放置在测试Web应用程序中,并使用VS2010在代码隐藏中使用适当的引用进行干净编译。
是否有可能此控件最初是以不同的名称,在不同的命名空间中创作,或从其他项目复制并粘贴到此项目中的shell源文件中?您遇到的问题似乎与ASP.NET在后台生成的中间文件的缺失直接相关,以便为可在控件源代码隐藏中引用的基于标记的实体建立受保护的声明。如果由于某种原因,VS2010无法检测到是否需要重新生成这些中间文件,则标记和源将变得不同步并以与您遇到的方式类似的方式失败。我显然不能保证这是你特定问题的原因,但我至少会认为这是一个强烈的嫌疑人。
我恭敬地建议您通过“添加新项目 - &gt;”在VS2010中创建全新控件解决方案资源管理器中的选项,并将只是标记从此控件添加到ascx文件(而不是指令行),然后查看该新控件的代码隐藏是否可以引用服务器端元素。
祝你好运。答案 2 :(得分:0)
使用“CodeFile”代替“CodeBehind”
<%@ Control Language="C#" Inherits="FSB.Layouts.Short_Home_Loan_Application" CodeFile="Short Home Loan Application.ascx.cs" %>
答案 3 :(得分:0)
您可以调整这些元素:
1 CodeFile
CodeFile="Short_Home_Loan_Application.ascx.cs" %> //AddCodeFile, and set the same name
2 Runat
将runat="server"
添加到表单
3并使用Div
容器