2014-09-22 45 views
1

我有一个带有ListViewByQuery和Button控件的aspx站点。当按钮被点击时,我想从ListViewByQuery控件中获取选定的项目。我用下面的代码,但变量“选择”总是具有0Sharepoint - 从ListViewByQuery控件获取选定的项目 - ASPX Site

<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server"> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      var button = $("input[id$=SaveButton]"); 
      button.click(function() { 

       var context = SP.ClientContext.get_current(); 
       var selection = SP.ListOperation.Selection.getSelectedItems(context); 

       var fileItems = []; 
       var currentItem; 

       for (currentItem in selectedItems) { 
        fileItems.push(currentItem); 
        context.load(currentItem, 'Id'); 
       } 

       context.executeQueryAsync(Function.createDelegate(this, function() { 
        for (var i = 0; i < fileItems.length; i++) { 
         alert(fileItems[i].get_id()); 
        } 
       })); 

      }); 
     }); 
    </script> 
</asp:Content> 
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server"> 
    <div id="pnlDiv"> 
     <SharePoint:ListViewByQuery runat="server" ID="MyListView" Enabled="True" /> 
     <asp:Button ID="SaveButton" runat="server" Text="Button" /> 
    </div> 
</asp:Content> 
<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server"> 
    Application Page 
</asp:Content> 
<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" 
    runat="server"> 
    My Application Page 
</asp:Content> 

其他事实计数: - 列表您可以通过填写代码隐藏文件 - 的ASPX网站获得由事件调用接收器(“SPEventReceiverStatus.CancelWithRedirectUrl”)来自DL的编辑表单之后。

回答

0

方法ListModule.Util.getSelectedItemsDictcore.js)可用于检索ListViewByQuery Control中的选定项目。

实施例1

的例子演示了如何从工作流历史记录列表(wrkstat.aspx

function getSelectedItemsInfo(ctxNumber) 
{ 
    var listCtx = GetListContextFromContextNumber(ctxNumber); 
    return ListModule.Util.getSelectedItemsDict(listCtx); 
} 

//Note: Context Number for Workflow History list on page wrkstat.aspx is 2, since it contains 2 ListViewByQuery controls on the page. If page contains only single ListViewByQuery control then Context Number is 1 
var selectedItems = getSelectedItemsInfo(2); 
printItemsInfo(selectedItems); 

function printItemsInfo(items) 
{ 
    if(!items) 
     return; 
    for (var key in items){ 
     var item = items[key]; 
     var itemId = item.id; 
     var itemType = item.fsObjType; 
     console.log(String.format('Selected List Item Id: {0}',itemId)); 
    }    
} 

注意所选项目:确定ListViewByQuery控制上下文编号有 指定。对于页面wrkstat.aspx上的工作流程历史记录列表,由于它包含页面上的2个ListViewByQuery控件,因此它是 2。如果 页面仅包含单ListViewByQuery控制则上下文编号为

例2

下面的例子演示了如何从工作流历史记录列表(wrkstat.aspx

选定项检索 ListItem集合
function getSelectedItems(ctxNumber, success,failure) 
{ 
    var listCtx = GetListContextFromContextNumber(ctxNumber); 
    var selectedItems = ListModule.Util.getSelectedItemsDict(listCtx); 
    if(!selectedItems) { 
     success(null); 
     return; 
    }  

    var context = SP.ClientContext.get_current(); 
    var list = context.get_web().get_lists().getByTitle(listCtx.ListTitle); 
    var listItems = []; 
    for (var key in selectedItems){ 
     var item = selectedItems[key]; 
     var listItem = list.getItemById(item.id); 
     context.load(listItem); 
     listItems.push(listItem); 
    }    

    context.executeQueryAsync(
     function() { 
      success(listItems); 
     }, 
     failure); 
} 

//Usage 
getSelectedItems(2,printWorkflowHistory,logError); 
function printWorkflowHistory(items) 
{ 
    if(!items) 
     return; 
    for (var i = 0; i < items.length;i++){ 
     var item = items[i]; 
     console.log(String.format('Selected List Item Id: {0}',item.get_item('Description'))); 
    }    
} 
function logError(error){ 
    console.log(JSON.stringify(error)); 
} 
相关问题