我有一个Web部件,它在文本框字段上使用验证(InputFormRequiredFieldValidator
)来阻止提交空字段。在编辑模式中单击“签入以共享草稿”或“发布”时,此验证已完成,因为我实际上并未尝试提交表单,而是将其签入,我宁愿这样做没发生。
我怎样才能做到这一点?
另请参阅:Sharepoint web part form validation blocks updating web part settings - 这有验证码,以及我如何解决EditorPart设置验证的问题。
更新:我已尝试检测EditDisplayMode并禁用验证程序,如下所示:
if (WebPartManager.DisplayMode.Equals(WebPartManager.EditDisplayMode))
{
messageRequiredValidator.Enabled = false;
}
这不起作用 - 我在检查页面时仍然收到验证失败消息。也许我没有正确检测到DisplayMode。
答案 0 :(得分:2)
正如Madhur指出我需要检查BrowseDisplayMode。我在编辑模式下开始关闭验证器的路线,并依赖于默认值true,但还有其他显示模式,如设计,我可能也会遇到问题。所以我检查了BrowseDisplayMode,如下所示:
WebPartManager mgr = WebPartManager.GetCurrentWebPartManager(Page);
if (mgr.DisplayMode.Equals(mgr.SupportedDisplayModes["Browse"]))
{
messageRequiredValidator.Enabled = true;
}
else
{
messageRequiredValidator.Enabled = false;
}
这似乎可以解决问题。非常感谢任何人对此方法的任何反馈。
答案 1 :(得分:1)
我经历了一个痛苦的世界,让这个工作,所以我想分享。
即使我正确地进入显示模式,无论模式如何,我的控制都会继续验证。
最终解决方案涉及三件事:
这是代码。以前提供的示例的基本变化。
// 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.";
}
答案 2 :(得分:0)
使用WebPartManager.DisplayMode
枚举检测当前页面模式,并仅在BrowseDisplayMode
这就是SharePoint OOTB webparts验证的方式。
答案 3 :(得分:0)
//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
}
});