共享点列表中的C#MVC显示项目

时间:2018-08-03 12:51:21

标签: c# asp.net-mvc sharepoint

所以...我创建了一个Sharepoint加载项(C#MVC)以获取列表信息并创建/更新项目。我过去做过创建/更新,现在不打算解决。

我的问题是在MVC视图中显示列表项。我到目前为止所做的->

我使用将在表中显示的信息创建了一个模型(类):

public class IRFItem
{
    public string Title { get; set; }
    public string StartDate { get; set; }
    public string EndDate { get; set; }
    //public string CreatedBy { get; set; }
}

在同一文件中(为了使测试紧凑),我还添加了一种获取所需项目的方法:

     public static List<IRFItem> GetItems(SharePointContext spContext, CamlQuery camlQuery)
    {

        List<IRFItem> items = new List<IRFItem>();
        //var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext.Current);

        using (var clientContext = spContext.CreateUserClientContextForSPAppWeb())
        {
            if (clientContext != null)
            {
                List irfList = clientContext.Web.Lists.GetByTitle("IRF");
                ListItemCollection irfListItems = irfList.GetItems(camlQuery);
                clientContext.Load(irfListItems);
                clientContext.ExecuteQuery();
                if (irfListItems != null)
                {
                    foreach (var irfListItem in irfListItems)
                    {
                    items.Add(
                        new IRFItem
                        {
                            Title = irfListItem["Title"].ToString(),
                            StartDate = irfListItem["StartDate"].ToString(),
                            EndDate = irfListItem["EndDate"].ToString(),
                        });
                    }
                }
                else
                {
                    items.Add(
                    new IRFItem
                    {
                        Title = "Empty",
                        StartDate = "Empty",
                        EndDate = "Empty"
                    });
                }

            }
        }

        return items;
    }

在我的自定义控制器(称为SharepointController,这样我就不会搞乱默认控制器)中添加了->

    // GET: Sharepoint
    [SharePointContextFilter]
    public ActionResult Index()
    {

        var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext);

        ViewBag.Username = SharePointService.GetUserName(spContext);

        CamlQuery queryProducts = new CamlQuery();
        queryProducts.ViewXml =
           @"<View>  
         <ViewFields><FieldRef Name='StartDate' /><FieldRef Name='LinkTitle' /><FieldRef Name='Title' /><FieldRef Name='Author' /><FieldRef Name='EndDate' /><FieldRef Name='ID' /></ViewFields> 
  </View>";

        List<IRFItem> items = SharePointService.GetItems(spContext, queryProducts);

        //SharePointService.GetItems(spContext, queryProducts);
        return View(items);
    }

最后我想要的视图包含->

                    @foreach (AddinTest1Web.Models.IRFItem irfItem in Model)
                    {
                        <tr>
                            <td>@irfItem.Title</td>
                            <td>@irfItem.StartDate</td>
                            <td>@irfItem.EndDate</td>
                        </tr>
                    }

我没有收到任何错误,但是我的表始终是空的……我什至在GetItems中添加了其他部分,以创建一个显示为空的项目,以便我知道它是否与共享点相关的问题还是其他。老实说,我的MVC经验并不多(一周前才开始学习,但是我是那种边干边学的人)。

有人在这里看到任何问题吗?我已经按照教程进行了此操作,并做了一些自己的小改动。

参考:https://www.chakkaradeep.com/2013/10/18/building-apps-for-sharepoint-with-mvc/

任何提示都会受到赞赏,

编辑:通过为应用程序提供更多权限(为了安全起见,列出和访问Web),我跳过了该错误,并且返回了结果,但是由于executeQuery不能按时完成,因此我无法创建项目。知道如何延迟吗?我记得过去我在处理任务时遇到了bigggg问题,所以我不知道从哪里开始。

2 个答案:

答案 0 :(得分:0)

我从调试中看到的东西。

我将代码GetItems()移到单独的Helper类,然后在其中放置一个断点以查看它是否正在触发。

如果您没有收到任何错误,并且返回数据始终为空,则意味着部分代码没有得到执行(同步或异步问题?)

答案 1 :(得分:0)

好吧,所以我解决了这个问题(经过了几个小时的战斗,这太简单了,我现在想打自己一拳)。

万一有人遇到这个问题->

为什么我的列表中没有任何物品(甚至没有错误)->没有为应用程序分配足够的权限。通过提供完整的列表权限和完整的Web权限来解决。

为什么我的foreach出现错误->显然,一列的名称不同。我通过尝试这段代码弄清楚了(显然更好,因为它引发错误,与从列表中获取所有内容不同)->

            clientContext.Load(irfListitems, 
                itemss => itemss.Include(
                    item => item["Title"],
                    item => item["StartDate"],
                    item => item["EndDate"]
                    ));