首先让我澄清一下,并发布已经解释了如何覆盖 SaveButton 的文章:
- How to override or customize the Sharepoint SaveButton?
- How to override functionality of the Ribbon Save button
- Override SharePoint Save Button to Provide Custom Functionality
我已阅读并理解它们,我只是不知道如何在我的特定情况下完全实现它:
我有一个自定义渲染模板“CustomRender”,其中包含“真实表单”。真实表单的代码看起来如下:
<%@ Register TagPrefix="wssuc" TagName="ToolBar"
src="~/_controltemplates/ToolBar.ascx" %>
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="RealForm.ascx.cs" Inherits="CustomNameSpace.CustomForm" %>
<p>Test</p>
<wssuc:ToolBar runat="server" id="toolbar">
<TemplateButtons>
<SharePoint:SaveButton runat="server" />
</TemplateButtons>
</wssuc:ToolBar>
现在我想覆盖这个保存按钮。上面的网站声明我只需要编写另一个覆盖按钮的控件。例如:
public class NewSaveButton: SaveButton
{
protected override bool SaveItem()
{
bool success = base.SaveItem();
RedirectUrl = String.Concat(List.ParentWeb.ServerRelativeUrl, "/",
List.Forms[PAGETYPE.PAGE_DISPLAYFORM].Url, @"?ID=",
ListItem.ID, @"&Source=", ListItem.ParentList.DefaultViewUrl);
return success;
}
}
现在我只是不知道如何在我的其他模板中注册这个模板。我是否不能只覆盖模板后面代码中的 SaveButton - 我该如何做到这一点并稍后引用它?
- 选项一:表单的代码隐藏 (
RealForm.ascx.cs
) - 我可以将覆盖方法放在那里吗?如何在表单中引用该按钮(如何获取<NewSaveButton>
)? - 选项二:另一个仅用于按钮的模板,例如SaveButton.ascx” - 我如何通过
<%@ Register... %>
引用它,即当通过功能部署时我如何知道PublicKeyToken
等。这里同样的事情:我的目标是获得某种“<NewSaveButton>
” “表单控件。
最佳答案
执行此操作时,您将创建一个新的服务器控件,因此您需要在页面上(或者在本例中,在模板 .ascx 文件中)注册新控件。
<%@ Register TagPrefix="MyPrefix" Namespace="ControlNamespace" Assembly="MyFullyQualifiedAssembly" %>
在代码文件中,您可以将 ToolboxDataAttribute
添加到类中(仅当您从 Visual Studio 中的工具箱中拖放控件时才需要这样做)
[ToolboxData("<{0}:NewSaveButton runat=\"server\"></{0}:NewSaveButton>")]
public class NewSaveButton : SaveButton {}
现在,您应该能够将表单上的保存按钮替换为以下内容:
<MyPrefix:NewSaveButton runat="server"></MyPrefix:NewSaveButton>
您基本上是按照 ASP.NET 的规则创建一个新的服务器控件(这里没有发生任何共享点特定的事情)。
有关更多信息,请查看此页面:http://msdn.microsoft.com/en-us/library/yhzc935f(v=VS.85).aspx
关于c# - 覆盖 SharePoint :SaveButton in custom form template,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5249295/