Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Sharepoint 2013-编辑表单,人员选择器新值未保存_Jquery_Sharepoint_Sharepoint 2013 - Fatal编程技术网

Jquery Sharepoint 2013-编辑表单,人员选择器新值未保存

Jquery Sharepoint 2013-编辑表单,人员选择器新值未保存,jquery,sharepoint,sharepoint-2013,Jquery,Sharepoint,Sharepoint 2013,我使用了下面的代码来增加people picker的价值。代码在NewForm.aspx中运行良好。但是当我在EditForm.aspx中编辑人员选择器时,它不接受新值。它只保存旧值 function SetNewPeoplePicker(controlName, Username) { var ppDiv = jQuery("[id$='ClientPeoplePicker'][title='" + controlName + "']"); var ppEditor = ppDiv

我使用了下面的代码来增加people picker的价值。代码在NewForm.aspx中运行良好。但是当我在EditForm.aspx中编辑人员选择器时,它不接受新值。它只保存旧值

function SetNewPeoplePicker(controlName, Username) {
var ppDiv = jQuery("[id$='ClientPeoplePicker'][title='" + controlName + "']");      
var ppEditor = ppDiv.find("[title='" + controlName + "']"); 
var spPP = SPClientPeoplePicker.SPClientPeoplePickerDict[ppDiv[0].id];          
ppEditor.val(Username);                 // Set the value
spPP.AddUnresolvedUserFromEditor(true);                 // Resolve the User if (!spPP.HasInputError) 
{
        var userKeys = spPP.GetAllUserInfo();
        var myUser = userKeys[0];
        Manager = myUser.AutoFillDisplayText;
}
spPP.SetEnabledState(false);
jQuery('a.sp-peoplepicker-delImage').hide();
}

我读到我们必须将Web部件属性更改为“服务器渲染”。但是整个UI都发生了变化,我用JS为其他字段编写的代码也失败了


可以提供任何解决方案。

< P>因为您使用SharePoint 2013,我建议您考虑以下方法。SharePoint 2013引入了一种所谓的
客户端呈现模式(CSR)
,用于使用HTML和JavaScript呈现列表视图和表单,这是一种默认呈现模式

如何使用CSR在新建/编辑表单中初始化用户字段 下面的示例演示如何在新建和编辑表单中初始化用户字段(
AssignedTo
任务列表中的字段):

模板代码:

(function () {
    var ctx = {};
    ctx.Templates = {};
    ctx.Templates.Fields = {
        'AssignedTo': {
            'NewForm': renderPeoplePickerWithDefaultValue,
            'EditForm': renderPeoplePickerWithDefaultValue
        }
    };
    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctx);
})();

function renderPeoplePickerWithDefaultValue(ctx) {
     //1.set user field value
     var loginName = String.format('i:0#.f|membership|{0}',_spPageContextInfo.userLoginName);  //set to current user login name
     var displayName = $('div#SuiteNavUserName').text();   //set to current user display name 
     var userEntry = createUserEntity(loginName,displayName);
     ctx.CurrentFieldValue = [];   //Note: it is assumed the user field is a multi-valued field (!)
     ctx.CurrentFieldValue.push(userEntry);
     //2.render default People Picker  
     return SPClientPeoplePickerCSRTemplate(ctx); 
}

function createUserEntity(loginName,displayName)
{
   return {
      Description: loginName,
      DisplayText: displayName,
      EntityGroupName: "",
      EntityType: "",
      HierarchyIdentifier: null,
      IsResolved: true,
      Key: loginName,
      MultipleMatches: [],
      ProviderDisplayName: "",
      ProviderName: ""
   };
}
注意:在指定示例中,
AssignedTo
字段设置为当前 用户,要指定其他用户,请修改
loginName
displayName
参数

p.p.S.该示例已在SharePoint Online中进行了测试

如何应用更改 如何应用更改,至少有两个选项:

  • 使用
  • 通过
    脚本编辑器
    /
    内容编辑器
    web部件
  • 以下是如何使用第二个选项应用更改:

  • 将页面(
    NewForm.aspx
    )切换到编辑模式
  • 在列表视图web部件的正下方添加
    脚本编辑器
    web部件
  • 使用
    script
    标记代码将指定的代码包装到脚本编辑器中,例如:
    {Template JS code go here}
  • 保存页面
  • 结果

    工具书类