zoukankan      html  css  js  c++  java
  • MOSS 验证日历中的开始时间、结束时间

          在SharePoint中的字段验证,都局限于字段的必填非必填阶段,如果要自己验证一个Email,或者是字段的大小比较,这个SharePoint 上默认是没有办法的。如要解决此问题,我们需要进行自定义。

    如果需要字段进行Email验证,可以参见:

    http://www.codeproject.com/KB/sharepoint/Control_validation.aspx?msg=2999709

    上面的链接可以解决我们大多数的验证问题,但是时间的大小比较,我们就无能无力了,因为SharePoint中的时间字段,由3部分组成,验证的时候,系统不能自动得到相应的值,所以不能进行验证。

    所以我们这边还是可以通过自定义脚本进行控件的验证。效果图:

    clip_image002

    具体步骤如下:

    1. 在新建页面自定义一个List Form, 具体操作可以参见上面的链接

    clip_image004

    1. 添加用于显示现在信息的Span(具体可以参加我前面的文章使用javascript 实现.net 验证控件功能

    <td width="400px" valign="top" class="ms-formbody">

                                     <SharePoint:FormField runat="server" id="ff4{$Pos}" ControlMode="New" FieldName="EndDate" __designer:bind="{ddwrt:DataBind('i',concat('ff4',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@EndDate')}"/>

                                     <SharePoint:FieldDescription runat="server" id="ff4description{$Pos}" FieldName="EndDate" ControlMode="New"/>

                                     <span id="spancompare" style="color: Red;display: none; ">Start Time Greater Than End Time</span>

                            </td>

    1. 添加脚本事件

    <script type="text/javascript" language="javascript">

            // 搜索对应到每个字段的文本输入框

            function searchFieldEditorElement(tagName, identifier, title) {

                var len = identifier.length;

                var tags = document.getElementsByTagName(tagName);

                for (var i = 0; i < tags.length; i++) {

                    var tempString = tags[i].id;

                    if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len)) {

                        return tags[i];

                    }

                }

                return null;

            }

           function valiatorField() {

                 try {

                    var txtstartDate = searchFieldEditorElement("input", "DateTimeFieldDate", "Start Time");

                    var txtendDate = searchFieldEditorElement("input", "DateTimeFieldDate", "End Time");

                    var startDateID = txtstartDate.name;

                    var endDateID = txtendDate.name;

     

     

     

                    var validatorID = document.getElementById("spancompare");

     

                    Page_Validators.push(document.getElementById("spancompare"));

     

                    var span = document.getElementById("spancompare");

                    span.controltovalidate = endDateID;

                    span.errormessage = "Start Time Greater Than End Time";

                    span.evaluationfunction = "CompareValidatorEvaluateIsValid";

                    span.controltocompare = startDateID;

                    span.controlhookup = endDateID;

                    span.operator = "GreaterThanEqual";

                    span.display = "Dynamic";

     

                    span.initialvalue = "";

     

                    ValidatorOnLoad();

                }

                catch (err) {

                    alert(err.description);

                }

            }

     

            // 指定在页面载入后运行指定的JS函数

            _spBodyOnLoadFunctionNames.push("valiatorField");

     

    </script>

    Ps:   _spBodyOnLoadFunctionNames.push("valiatorField");  方法为SharePoint中的方法,在页面加载过程中进行脚本的注册

    1. 上面只对日期做了判断,所以在页面上面开始日期大于结束日期会进行提示

    clip_image006

    1. 但是这个时候,出现了一个问题,就是Title的默认验证没有生效,所以我们必须在进行Title的验证

    a. 添加span

     <td width="400px" valign="top" class="ms-formbody">

                                     <SharePoint:FormField runat="server" id="ff1{$Pos}" controlmode="New" fieldname="Title" __designer:bind="{ddwrt:DataBind('i',concat('ff1',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Title')}" />

                                     <SharePoint:FieldDescription runat="server" id="ff1description{$Pos}" FieldName="Title" ControlMode="New"/>

                                     <span id="spanTitle" style="color: Red;display: none; ">You must specify a value for this required field</span>

                             </td>

    b. 添加脚本(加到上面的脚步的ValidatorOnLoad 前可以了)

                   var txtTitle = searchFieldEditorElement("input", "TextField", "Title");

                    var titleID = txtTitle.name; 

                   Page_Validators.push(document.getElementById("spanTitle")); 

                    var spanTitle = document.getElementById("spanTitle");

     

                    spanTitle.controltovalidate = titleID; 

                    spanTitle.errormessage = "*该项不能为空"; 

                    spanTitle.display = "Dynamic"; 

                    spanTitle.evaluationfunction = "RequiredFieldValidatorEvaluateIsValid"; 

                    spanTitle.initialvalue = "";

     

    这样就大功告成了

  • 相关阅读:
    swig编译GDAL的C#库时遇到的代码安全问题及解决方法
    AE + GDAL实现影像按标准图幅分割(下)
    AE + GDAL实现影像按标准图幅分割(上)
    ArcEngine保存栅格数据至rastercatalog
    通过日志解决问题的一个小例子-http换端口
    firewall-cmd命令的富语言(richlanguage)示例
    VMware空虚拟机通过网络安装系统时获取不到IP地址情况(基于Linux的DHCP服务器)
    Linux中tune2fs命令的-o选项
    date -d
    tmp/ 和 var/tmp/ 的区别
  • 原文地址:https://www.cnblogs.com/stormlly/p/1553135.html
Copyright © 2011-2022 走看看