从 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 配置和模拟级别。显然我们的服务器管理员决定在不告诉任何人的情况下更改它。