Sharepoint Web部件表单验证阻止更新Web部件设置

时间:2010-12-02 10:10:32

标签: sharepoint sharepoint-2007 web-parts

我在C#中为Sharepoint 2007编写了一个Web部件,它有一个字段,使用RequiredFieldValidator()验证为必填字段。 Web部件还有一些配置字段(通过单击“修改共享Web部件”来编辑的字段)。

当我对这些字段进行更改并尝试应用它们时,即使我没有提交表单,用户字段的验证也会启动并阻止更新。我只是想提交设置。 Web部件可能会在我们的服务器场中的几个位置使用,因此网站集管理员需要能够更改设置 - 此时这些用户不够友好。

以下是我验证用户字段的位置:

// Validate form field - required field, and max length is 100 characters.
InputFormRequiredFieldValidator messageRequiredValidator = new InputFormRequiredFieldValidator();
messageRequiredValidator.ControlToValidate = txtMessage.ID;
messageRequiredValidator.ErrorMessage = "You must write a message to send!";
messageRequiredValidator.Display = ValidatorDisplay.Dynamic;
messageRequiredValidator.Text = "<img src=\"/_layouts/images/CNSCA16.gif\"/> You must write a message to send.";
tc.Controls.Add(messageRequiredValidator);

这是我定义其中一个配置字段的地方:

private string recipientEmailAddress = "sender@domain.tld";
    [WebBrowsable(true),
    Personalizable(true),
    WebPartStorage(Storage.Shared),
    WebDescription("Email address the form should be sent to"),
    WebDisplayName("Recipient Email Address"),
    SPWebCategoryName("Email Settings")]
    public string RecipientEmailAddress
    {
        get { return recipientEmailAddress; }
        set { recipientEmailAddress = value; }
    }

这是我编写的第一个网络部分,因此在如何进行管理员配置和用户提交字段验证方面可能存在一些细微之处。

3 个答案:

答案 0 :(得分:4)

好的 - 我找到了关键。您可以向每个验证程序添加validationGroup属性,以及导致验证的按钮。所以我改变了我的代码包括:

messageRequiredValidator.validationGroup = "UserInput";

和我提交按钮的类似属性。现在,当我在ToolPane中单击“确定”时,它不会验证UserInput验证组。只有当我点击我的提交按钮时才会发生这种情况。

答案 1 :(得分:1)

您可以在ApplyChanges方法中的OK,Cancel按钮上动态禁用验证:

ToolPane pane = Zone as ToolPane;
if (pane != null)
    pane.Cancel.CausesValidation = false;

或者您还可以检查编辑器窗格是否已打开并在webpart中禁用验证:

WebPartManager wpm = WebPartManager.GetCurrentWebPartManager(Page);

if (wpm.DisplayMode == WebPartManager.EditDisplayMode)
 {
      //Page is in edit mode
 }

答案 2 :(得分:1)

我建议使用SharePoint validation control