【发布时间】:2012-03-03 08:19:00
【问题描述】:
尽管我尽了最大的努力,但我的雇主仍要求我使用 Sharepoint 开发一个 Web 应用程序,而不是一些有用的东西。
我在 Visual Studio 2010 的 Sharepoint 项目中将用户控件嵌入到 Visual Web 部件时遇到问题。我正在使用以下步骤(请注意,此代码只是我所拥有的内容的概要 - 作为我目前的真实代码包含足够多的脏话让我终身禁止 StackOverflow):
创建一个新的空 Sharepoint 项目。
将用户控件添加到项目(位于 ControlTemplates 中),名为 MyControl.ascx
MyControl.ascx:
<asp:TextBox runat="server" ID="txtStuff" />
MyControl.ascx.cs:
public class MyControl : UserControl
{
public int Property { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
txtStuff.Text = "I hate you sharepoint";
}
}
- 将可视 Web 部件添加到项目 MyWebPart.ascx
MyWebPart.ascx
<%@ Register TagPrefix="c" TagName="MyControl" src="~/_controlTemplates/MyControl" %>
<c:MyControl runat="server" ID="mycontrol" />
当我到达这一点时,我没有为 MyControl 获得任何智能感知,这很可能是因为 VS 不知道 .ascx 文件的存在。我还在控件名称下看到绿色波浪线,让我知道它不存在。但是,我仍然可以将项目部署到我的 Sharepoint 服务器本身,并且一切正常。
但是,当我需要与控件本身进行任何有用的交互时,这就会崩溃:
MyWebPart.ascx.cs
protected void Page_Load(object sender, EventArgs e) {
mycontrol.Property = 1234;
}
这会产生“System.Web.UI.UserControl 不包含'Property'的定义并且没有扩展方法...'的错误。designer.cs 文件确实将控件指定为 UserControl,而不是它的真正的类型。
由于现在这会产生构建错误,因此我无法将项目部署到 Sharepoint 服务器,因此我无法真正解决这个智能感知问题。
我发现这是非常不一致的行为;有时会出现智能感知,具体取决于项目当前是否部署到服务器。但是,我无法采取一组可预测的步骤来使开发环境处于工作状态。
有什么想法吗?我尝试过的事情:
右键单击 Web 部件的 ASCX 并单击“打开方式...”并选择“使用编码”选项。没有效果。
使用部署和收回的应用程序以及关闭和重新打开 .ascx 文件、解决方案和 Visual Studio 本身的各种组合进行开发。有时有效,有时无效。
禁用了项目的“调试后自动收回”选项(从知识库文章中推荐)。没有效果。
【问题讨论】:
-
你有解决办法吗?我被困在同一页面上。
标签: sharepoint-2010 user-controls web-parts