我试图通过查询字符串传递一个值来填充NewForm.aspx列表中的字段。示例:http://example.com/Lists/mylist/Newform.aspx?ID=3
我受限于使用JavaScript并且必须坚持使用查询字符串。这可能吗?
答案 0 :(得分:8)
SharePoint JS Library包含用于提取查询字符串参数的GetUrlKeyValue
函数,例如:
var itemId = GetUrlKeyValue('ID'); //get Item Id from query string
在SharePoint 2013中引入了一种客户端呈现(CSR)技术,用于自定义列表视图&形式。
由于CSR是SharePoint 2013中的默认呈现模式,因此我建议使用此方法自定义“新建表单”页面以填充表单字段。作为介绍,请点击这篇文章Introduction to Client Side Rendering in SharePoint 2013。
假设任务列表包含任务类别查找字段。然后,可以使用以下呈现模板来设置从名为TaskCategory
的查询字符串参数中检索的cat
查找字段值:
(function () {
var ctx = {};
ctx.Templates = {};
ctx.Templates.Fields = {
'TaskCategory': {
'NewForm': renderTaskCategory
}
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctx);
})();
function renderTaskCategory(ctx) {
var catId = GetUrlKeyValue('cat'); //extract cat parameter from a query string
ctx.CurrentFieldValue = catId; //set lookup field value
return SPFieldLookup_Edit(ctx); //default template for rendering Lookup field control
}
为了应用更改,我们需要设置XLV Web部件的JSLink
属性:
Tasks.js
。然后将指定的内容上传到SharePoint Site Assets
库Miscellaneous
组JSLink
属性下找到并指定其值:
~sitecollection/SiteAssets/Task.js
如下图所示
答案 1 :(得分:3)
是的,这是可能的。只需使用“ID”以外的参数,例如使用http://example.com/Lists/mylist/Newform.aspx?MasterId=3。 某些Query String参数由SharePoint本身保留。例如ID,内容
您可以使用SharePoint客户端上下文REST API来获取数据并显示它。在newform上添加内容编辑器,然后按照以下过程操作。添加对这三个脚本的引用:
1. /_layouts/15/SP.Runtime.js
2./_layouts/15/SP.js
3. //ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js
并使用以下示例:
<script type="text/javascript">
$(document).ready(function () {
GetListData(getParameterByName("MasterId"));
});
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regexS = "[\\?&]" + name + "=([^&#]*)";
var regex = new RegExp(regexS);
var results = regex.exec(window.location.href);
if (results == null)
return "";
else
return decodeURIComponent(results[1].replace(/\+/g, " "));
}
function GetListData(strMasterId) {
context = new SP.ClientContext.get_current();
web = context.get_web();
var list = web.get_lists().getByTitle('CustomListName');
var myquery = new SP.CamlQuery();
myquery.set_viewXml("<View><Query>" +
"<Where>" +
"<Eq>" +
" <FieldRef Name='ID'/>" +
"<Value Type='Counter'>" + strMasterId + "</Value>" +
"</Eq>" +
"</Where>" +
"</Query></View>");
myItems = list.getItems(myquery);
context.load(myItems);
context.executeQueryAsync(Function.createDelegate(this, this.GetListDataSuccess), Function.createDelegate(this, this.GetListDataFailed));
}
function GetListDataSuccess() {
var ListEnumeratorAcc = this.myItems.getEnumerator();
while (ListEnumeratorAcc.moveNext()) {
var currentItem = ListEnumeratorAcc.get_current();
$("input[title='Project Name']").val(currentItem.get_item('ProjectName')[0]);
$("input[title='Project Location']").val(currentItem.get_item('ProjectLocation')[0]);
}
}
function GetListDataFailed(sender, args) {
alert("failed. Message:" + args.get_message());
}
</script>
答案 2 :(得分:1)
使用JavaScript:
var UrlParams = document.URL.split("?")[1].split("&");
var GetUrlParam = function (name)
{
for (var i = 0; i < UrlParams.length; i++)
{
var param = UrlParams[i].split("=");
if (param[0] == name) return decodeURIComponent(param[1]);
}
return null;
}
然后只需调用“GetUrlParam('ID')”并设置字段值;