【问题标题】:Sharepoint web part form validation blocks updating web part settingsSharepoint Web 部件表单验证块更新 Web 部件设置
【发布时间】:2011-05-19 00:55:33
【问题描述】:

我用 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; }
    }

这是我编写的第一个 Web 部件,因此在如何进行管理员配置和验证用户提交的字段方面可能会遗漏一些细节。

【问题讨论】:

    标签: sharepoint sharepoint-2007 web-parts


    【解决方案1】:

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

    messageRequiredValidator.validationGroup = "UserInput";
    

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

    【讨论】:

      【解决方案2】:

      您可以在 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
       }
      

      【讨论】:

      • 我希望能够在设置 Web 部件时验证编辑器窗格字段 - 这是否也会禁用它?
      【解决方案3】:

      我建议使用SharePoint validation control

      【讨论】:

      • 我已更改代码以使用这些不同的验证器控件(和更新的问题),但出现了同样的问题 - 更改 Web 部件设置字段时会启动公共字段的验证。
      猜你喜欢
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      相关资源
      最近更新 更多