0

从 Microsoft 博客中找到解决方案...见下文

好的,首先我不喜欢随机这个词,但是我在测试用例中找不到与这个问题的任何相关性,所以我将使用随机来描述这个问题的一部分。

设置:我有一个列表,其中我为 EditForm.aspx 和 NewForm.aspx 创建了自定义 UI。我在两者之间使用相同的 JS 文件和 JavaScript。我在谷歌地图中添加了帮助说明位置选择。我在“确定”按钮中添加了额外的代码以进行一些动态验证。我也做了很多动态菜单的事情。所有用户都使用 IE 9,并且该站点位于 MOSS 2007 服务器上。

问题:仅在 EditForm.aspx 上,单击“随机”确定会导致立即出现白屏。表单未保存,当查看白屏的源代码时,我发现一个空白的 html 页面。

我试图找到这个问题: - 我试图缩小发生这种情况的用户和计算机的范围,发现每台计算机上的每个人都会发生这种情况(再次“随机”)。- 我尝试禁用“确定”按钮前面的代码 - 我尝试按照调试了 IE9 的外部脚本的代码并没有发现错误

我可以提供代码,但它有点长,我真的不知道从哪里开始。所以如果需要我可以提供。

感谢您提前提供帮助。

编辑:这是重新连接我的确定按钮的代码(我之前将值重置为“保存”)

    var okBtns = $('input[value="Save"]')
    $.each(okBtns, function(index,value){
        okFunction=$(value).attr('onclick');
        $(value).attr('onclick','return false;')
        $(value).bind('click', function(){
            if ($('#'+StatusBox).val()=='Draft') {$('#'+StatusBox).val('New Request')}
            var err = clickOKbutton();
            if(err==0) {okFunction()};
        });
    });

这是 clickOKbutton 函数,它是原始共享点操作之前的代码:

function clickOKbutton()
{
    //all of the imput validation i could ever wish for!!!!
    var NoteVal = ''
    var NameAry = $('#'+PersonnelBox).parent().children(":first").children("SPAN").children("SPAN");
    $.each(NameAry, function(index,value){
        var $n=$(value).html();     
        if(NoteVal.length==0) {NoteVal=$n} else {NoteVal=NoteVal+';'+$n};
    });
    //$('#'+AddNotes).val(NoteVal);

    var plh = $('#'+PersonnelBox).parent().html()
    userNameTx = $('#zz8_Menu').text();
    userNameTx = userNameTx.replace('Welcome ','');
    $.each(OICUsers, function(i,v){
        if(plh.indexOf(v) > -1 && st=='New Request'){
            $('#'+StatusBox).val('OIC Bypassed')
            $('#'+CommentsBox).val('OIC is travling on this TDY/TAD and cannot approve. So this request is bypassing the "OIC Approval" step')
        }
    });

    /*userNameTx = $('#zz8_Menu').text();
    userNameTx = userNameTx.replace('Welcome ','')

    $('#' + ModBox).closest('TR').show();*/
    var message=''
    message = detectFieldChanges(AllFieldsArray,AllOrgValArray,"Draft,New Request,Modified")        
    if(message.length>0){
        $('#'+ModBox).val(message);
        AutoResizeTextarea(ModBox);
    }

    message = detectFieldChanges(ValFieldsArray,OrgValuesArray,"Draft,New Request,Modified,OIC Approved,OIC Bypassed,Pending RFI,Ready for COS")
    userNameTx = $('#zz8_Menu').text();
    userNameTx = userNameTx.replace('Welcome ','');
    if(message.length>0&&$.inArray(userNameTx,COSUsers)==-1){
        $('#'+StatusBox).val('Modified').change;
        $('#'+StatusLongBox).val('Modified').change;
    }       


    //Subject box
    var pb = NoteVal;
    var ep = $('#'+ExtPersonnel).val();
    var ab = $('#'+AddressBox).val();
    var sd = $('#'+sDateBox).val();
    var ed = $('#'+eDateBox).val();
    var st = $('#'+StatusBox).val();
    var p = pb+';'+ep;
    var p = p.replace(/mossaspnetmembershipprovider:/g,'');
    var p = p.slice(0,-1);
    var ad = ab+' '+sd+' to '+ed;
    var s = 'eTDY | '+st+' - '+p+' - '+ad;
    if(s.length>255){
        var l = s.length-255;
        p = p.substring(0,p.length-l);
        s = 'eTDY | '+p+' - '+ad;
    }
    $('#'+Subject).val(s);

    //check Lat/Lng value
    if($('#'+LatBox).val()=='' || $('#'+LngBox).val()==''){
        //alert("Cannot continue unless the Lat Lng has a vallid coordinate");
        if($('#LatLngError').length==0){
            errorHTML='<br><span class="ms-error" id="LatLngError">You must specify a value for Lat and Lng</span>'
            $('#'+AddressBox).closest('TD').append(errorHTML)

        }
        return -1
    }
    return 0
};

它很混乱,但希望你能理解它。

编辑2:

我想我已经追踪到了随机性……我完全关闭了所有自定义代码,但问题仍然存在。然后我尝试将工作记录与非工作记录进行比较。一切看起来都很正常,直到我带着多人选择器到达现场。如果我在该字段中有超过 2 人,它将正常保存,但是当我在人员选择器字段中有超过 2 人的情况下对该记录进行修改时会导致此问题。我将做更多的研究,并将发布我的结果。

编辑3:

http://blogs.msdn.com/b/jorman/archive/2009/12/22/mystery-of-the-sharepoint-white-screens.aspx

这个问题都归结为 IIS 配置和模拟级别。显然我们的服务器管理员决定在不告诉任何人的情况下更改它。

4

2 回答 2

0

通常,当您从网页(尤其是在 MOSS 中)获得 [看似随机的] 行为时,这意味着您在页面上定义了模棱两可的事件。通常,当我将某种 JScript 添加到按钮或表单 on_submit 时,我会得到这个。
如果没有看到您的代码,我真的无法进一步缩小范围。我建议:在您的 HTML 表单或按钮单击事件上查找 JavaScript 事件,或查找指向无处 (href=#) 但具有 javascript 的锚 [a] 标记。然后决定(严格地)使用 HTML 方式(表单、提交按钮)或 javascript 方式(没有表单,没有 asp:button)并断开另一个。

于 2012-12-06T21:01:33.030 回答
0

这个问题都归结为 IIS 配置和模拟级别。显然我们的服务器管理员决定在不告诉任何人的情况下更改它。

http://blogs.msdn.com/b/jorman/archive/2009/12/22/mystery-of-the-sharepoint-white-screens.aspx

于 2012-12-12T21:50:00.070 回答