通过QueryString将值传递给NewForm.aspx

时间:2014-08-06 13:05:55

标签: sharepoint sharepoint-2013

我试图通过查询字符串传递一个值来填充NewForm.aspx列表中的字段。示例:http://example.com/Lists/mylist/Newform.aspx?ID=3

我受限于使用JavaScript并且必须坚持使用查询字符串。这可能吗?

3 个答案:

答案 0 :(得分:8)

SharePoint JS Library包含用于提取查询字符串参数的GetUrlKeyValue函数,例如:

var itemId = GetUrlKeyValue('ID'); //get Item Id from query string

如何在SharePoint 2013中的“新建表单”页面中填充表单字段?

在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属性:

  • 首先,让我们保存这个JS模板,并将其命名为Tasks.js。然后将指定的内容上传到SharePoint Site Assets
  • 在“编辑”模式下打开“新建表单”页面,然后转到“Web部件属性”
  • MiscellaneousJSLink属性下找到并指定其值: ~sitecollection/SiteAssets/Task.js如下图所示 enter image description here

结果

enter image description here

答案 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')”并设置字段值;