【问题标题】:Sharepoint Web Part validation set off by Publishing Controls发布控件触发的 Sharepoint Web 部件验证
【发布时间】:2011-06-01 13:14:51
【问题描述】:

我有一个 Web 部件,它在文本框字段上使用验证 (InputFormRequiredFieldValidator) 以防止提交空字段。当在编辑模式下单击签入以共享草稿或发布时,此验证已完成,因为我实际上并没有尝试提交表单,而是签入,所以我宁愿这样做没有发生。

我怎样才能做到这一点?

另请参阅:Sharepoint web part form validation blocks updating web part settings - 这有验证代码,以及我如何解决 EditorPart 关闭验证的问题。

更新:我已尝试检测 EditDisplayMode 并禁用验证器,如下所示:

if (WebPartManager.DisplayMode.Equals(WebPartManager.EditDisplayMode))
{
     messageRequiredValidator.Enabled = false;
}

这不起作用 - 我在签入页面时仍然收到验证失败消息。也许我没有正确检测到 DisplayMode。

【问题讨论】:

    标签: c# sharepoint-2007 web-parts


    【解决方案1】:

    使用WebPartManager.DisplayMode 枚举来检测当前页面模式并仅在BrowseDisplayMode 中启用验证

    这就是 SharePoint OOTB Web 部件进行验证的方式。

    http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webparts.webpartmanager.displaymode.aspx

    【讨论】:

    • 我正在使用InputFormRequiredFieldValidator 方法进行验证。所以只有当 WebPartManager.DisplayMode 等于 BrowseDisplayMode 时,我才能将 Enabled 属性设置为 true?
    • 是的,在控制加载方法中,您可以根据页面模式启用和禁用验证器。
    • 在我的回答中检测 DisplayMode 的方法是否与您的建议类似?
    【解决方案2】:

    正如 Madhur 指出的,我需要检查 BrowseDisplayMode。我开始在编辑模式下关闭验证器并依赖默认值 true 的路线,但还有其他显示模式,例如设计,我也可能会遇到问题。所以我检查了 BrowseDisplayMode 如下:

    WebPartManager mgr = WebPartManager.GetCurrentWebPartManager(Page);
    if (mgr.DisplayMode.Equals(mgr.SupportedDisplayModes["Browse"]))
    {
         messageRequiredValidator.Enabled = true;
    }
    else
    {
         messageRequiredValidator.Enabled = false;
    }
    

    这似乎可以解决问题。如果有人对此方法有任何反馈,我们将不胜感激。

    【讨论】:

    • 什么是 mgrSupportedDisplayModes ?
    • 错字(现已更正) - 应为 mgr.SupportedDisplayModes。 SupportedDisplayModes 是 WebPartManager 支持的模式的集合。您将如何进行检测?
    【解决方案3】:

    为了让它工作,我经历了一个痛苦的世界,所以我想分享一下。

    即使我正确地获得了显示模式,我的控件仍会继续验证,无论模式如何。

    最终的解决方案涉及三件事:

    1. 默认禁用 RegularExpressionValidator - 即启用 - “false”
    2. 将我的代码移动到 CreateChildControls 方法中。
    3. 添加 ELSE 子句!没有它,验证总是设置为真。不要问我为什么。

    这是代码。先前提供的示例的基本变体。

    // Get the current display mode of the WPM
    WebPartManager wp = WebPartManager.GetCurrentWebPartManager(Page);
    String mode = wp.DisplayMode.Name;
    // Enable validation in BrowseDisplayMode only
    if (wp.DisplayMode == WebPartManager.BrowseDisplayMode)
    {
        reqJournal.Enabled = true;
    }
    else
    {
        reqJournal.Enabled = false;
        lblMsg.Text = "<strong>" + mode + " mode</strong>: Validation is disabled.";
    }
    

    【讨论】:

      【解决方案4】:
      //disable javascript on sharepoint edit mode
      $(function () {
          var inDesignMode = document.forms[MSOWebPartPageFormName].MSOLayout_InDesignMode.value;
      
          if (inDesignMode == "1") {
              // page is in edit mode
              if ((typeof (Page_Validators) != "undefined") && (Page_Validators != null)) {
                  var i;
                  for (i = 0; i < Page_Validators.length; i++) {
                      ValidatorEnable(Page_Validators[i], false);
                  }
              }
          }
          else {
              // page is in browse mode
          } 
      });
      

      【讨论】:

      • 没有工作这个,当点击按钮保存页面不工作
      猜你喜欢
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      • 2011-05-19
      • 1970-01-01
      相关资源
      最近更新 更多