2

我的 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# 网站。

提前致谢

4

4 回答 4

3

我假设您有一个 Web 应用程序项目而不是一个网站项目。因此,在解决方案资源管理器中,导航到您的*.ascx文件,展开它以查看 C# 代码隐藏,您还将看到一个*.ascx.designer.cs文件。删除那个“设计器”文件。接下来,右键单击您的*.ascx文件并选择转换为 Web 应用程序,这将重新生成设计器文件。现在尝试通过 C# 访问控件。

于 2012-09-14T18:24:02.420 回答
0

使用“CodeFile”而不是“CodeBehind”

<%@ Control Language="C#" Inherits="FSB.Layouts.Short_Home_Loan_Application" CodeFile="Short Home Loan Application.ascx.cs" %>
于 2012-09-13T11:46:19.520 回答
0

您可以调整这些元素:

1 代码文件

CodeFile="Short_Home_Loan_Application.ascx.cs" %> //AddCodeFile, and set the same name

2 鲁纳特

添加runat="server"到您的表单

Div3 并用容器替换你的面板

于 2012-09-13T13:19:22.923 回答
0

在您的 ascx 页眉中,修改您的 Inherits 指令以在您的代码后面包含命名空间前缀。

修订

我已将您发布的原始标记放入测试 Web 应用程序中,并使用 VS2010 使用代码隐藏中可用的正确引用进行干净编译。

该控件是否有可能最初是在不同的名称下、在不同的命名空间中创作的,或者从不同的项目中复制并粘贴到该项目的 shell 源文件中?您遇到的问题似乎与 ASP.NET 在后台生成的中间文件的缺失直接相关,这些文件用于为可在控件源代码隐藏中引用的基于标记的实体建立受保护的声明。如果由于某种原因,VS2010 无法检测到需要重新生成这些中间文件,则标记和源将变得不同步并以类似于您所遇到的方式失败。我显然不能保证这是您的特定问题的原因,但我至少会认为这是一个强烈的嫌疑人。

我会恭敬地建议您通过解决方案资源管理器中的“添加新项目->”选项在 VS2010 中创建一个全新的控件,并将该控件中的标记添加到 ascx 文件(而不是指令行)中,然后查看如果该新控件的代码隐藏可以引用服务器端元素。

祝你好运。

于 2012-09-13T11:31:29.467 回答