所以...我创建了一个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问题,所以我不知道从哪里开始。
答案 0 :(得分:0)
我从调试中看到的东西。
我将代码GetItems()移到单独的Helper类,然后在其中放置一个断点以查看它是否正在触发。
如果您没有收到任何错误,并且返回数据始终为空,则意味着部分代码没有得到执行(同步或异步问题?)
答案 1 :(得分:0)
好吧,所以我解决了这个问题(经过了几个小时的战斗,这太简单了,我现在想打自己一拳)。
万一有人遇到这个问题->
为什么我的列表中没有任何物品(甚至没有错误)->没有为应用程序分配足够的权限。通过提供完整的列表权限和完整的Web权限来解决。
为什么我的foreach出现错误->显然,一列的名称不同。我通过尝试这段代码弄清楚了(显然更好,因为它引发错误,与从列表中获取所有内容不同)->
clientContext.Load(irfListitems,
itemss => itemss.Include(
item => item["Title"],
item => item["StartDate"],
item => item["EndDate"]
));