【问题标题】:Validate Custom Sharepoint field if Empty?验证自定义 Sharepoint 字段是否为空?
【发布时间】:2011-10-26 16:08:34
【问题描述】:

我在 Visual Studio 2010 中使用带有自定义字段的 Sharepoint 2010。

我创建了一个自定义字段。这个特定的一个是日期时间字段(“终止日期”)。如果它为空白且另一个字段(“合同终止”等于是),我希望它无法通过验证。

所以我以前使用计算字段来执行此操作。这有效,但它会将验证错误放在编辑表单的顶部,而不是在我想要的“终止日期”字段旁边。如果该字段在自定义字段中使用 GetValidatedString 验证失败,通常会出现这种情况。

所以因为它在错误的地方,我做了一个自定义字段。但是因为日期是空白的,所以它永远不会命中 GetValidatedString 方法。我错过了什么吗?如果“终止日期”字段为空,是否有另一种方法使其验证失败并位于“终止日期”字段旁边?

我也尝试使用事件接收器解决方案。问题是它也会将错误消息放在顶部。而不是在终止日期字段旁边。

建议?

【问题讨论】:

    标签: validation sharepoint-2010 spfield


    【解决方案1】:

    对于自定义字段,您可以覆盖FieldRenderingControl,编写您自己的FieldControl。如果您不在“行踪”列表中使用此自定义字段,您可以从 DateTimeField 继承您的字段控件并覆盖 Validate 方法,例如:

    public override void Validate()  
    {
        base.Validate();
        if (IsValid)
        {
            if (!(your validation))
            {
                IsValid = false;
                ErrorMessage = “youe message”;
            }
        }
    }
    

    【讨论】:

    • 好的.. 我会查找如何做到这一点.. 我添加了以下.. 1,对 System.Web 2 的引用,使用 Microsoft.SharePoint.WebControls; 3、Override:public override BaseFieldControl FieldRenderingControl { get { return base.FieldRenderingControl; } } ...但我仍然会查找编写自己的字段控件..我希望您的建议是 write 并且它会让我将 valdate 放入一个空的日期字段...
    • 公共覆盖 BaseFieldControl FieldRenderingControl { get { BaseFieldControl control = null;控制 = 新的 YourDateTimeField(); /*继承自 DateTimeField*/ control.FieldName = base.InternalName;返回控制; } }
    • 看起来你说把它放在自定义字段类中。我的是 TerminationDateValidation.cs ..它继承自 SPFieldDateTime ..(类 TerminationDateValidation :SPFieldDateTime)...但是当我使用这一行时: control = new YourDateTimeField();我收到错误,它不需要 0 个参数.. 它需要字段,字段名 .. 如果我使用那些确切的参数.. 像 (ieldControl = new TerminationDateValidation(fields, fname);) .. 然后它说这些参数不要' t 存在于当前上下文中..
    • 如果相反,我在项目下创建一个 TerminationDateValidationFieldControl.cs 类,它继承自 BaseFieldContrl.. 那么我可以将它放在我的自定义字段类中...:
    • [SharePointPermission(SecurityAction.LinkDemand, ObjectModel = true)] 公共覆盖 BaseFieldControl FieldRenderingControl { get { BaseFieldControl fieldControl = null; fieldControl = new TerminationDateValidationFieldControl();返回字段控制;我不确定 SharePointPermission 行的意义是什么,或者我是否需要它..
    猜你喜欢
    • 2020-10-23
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多