我正在SharePoint中开发一个发布门户。页面布局,母版页是使用Visual Studio设计的,我使用wspbuilder将页面布局部署到内容数据库中。
我有一个要求,我必须在后面的代码中访问页面布局的控件,并为控件分配或获取值。但是,VS intellisense从不显示我的页面布局中使用的控件。我应该怎么做才能使用后面的代码访问控件?
有没有解决方法呢?
此致 Raghuraman.V
答案 0 :(得分:1)
您必须公开用户控件上的Web控件。
以下是一个快速示例,说明如何从父页面更改用户控件的文本框:
WebUserControl1.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.WebUserControl1" %>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
WebUserControl1.ascx.cs:
using System;
using System.Web.UI.WebControls;
namespace WebApplication1
{
public partial class WebUserControl1 : System.Web.UI.UserControl
{
public TextBox UserControlTextBox1
{
get { return TextBox1; }
set { TextBox1 = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
WebForm1.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
<%@ Register src="WebUserControl1.ascx" tagname="WebUserControl1" tagprefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<uc1:WebUserControl1 ID="WebUserControl11" runat="server" />
</div>
</form>
</body>
</html>
WebForm1.aspx.cs中:
using System;
namespace WebApplication1
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
WebUserControl11.UserControlTextBox1.Text = "Your text here...";
}
}
}
答案 1 :(得分:0)
我猜您在两个不同的项目中或至少在两个不同的位置拥有页面布局和代码隐藏。您还可以在SharePoint中使用与ASPX文件并排的“真实”代码隐藏页面,这样您就不必重新声明控件。
为此,您可以为WSP包创建Visual Studio项目 “ASP.NET Web应用程序”,使用代码隐藏文件并行创建ASPX页面并使用WSP 生成器从包中删除C#文件(代码仍然编译到程序集中并随之部署)。这个技巧很有效,因为WSP Builder可以 在Visual Studio项目中配置了本地配置文件以删除某些文件 类型。
这里是本地WSPBuilder.exe.config文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Excludefiletypes" value="cs" />
</appSettings>
</configuration>