C#MVC显示sharepoint列表中的项目
所以…我创建了一个Sharepoint外接程序(C#MVC)来获取列表信息并创建/更新项目。我以前做过创建/更新,现在不打算解决这个问题 我这里的问题是在MVC视图中显示列表项。到目前为止我所做的-> 我创建了一个模型(类),其中的信息将显示在表中:C#MVC显示sharepoint列表中的项目,c#,asp.net-mvc,sharepoint,C#,Asp.net Mvc,Sharepoint,所以…我创建了一个Sharepoint外接程序(C#MVC)来获取列表信息并创建/更新项目。我以前做过创建/更新,现在不打算解决这个问题 我这里的问题是在MVC视图中显示列表项。到目前为止我所做的-> 我创建了一个模型(类),其中的信息将显示在表中: public class IRFItem { public string Title { get; set; } public string StartDate { get; set; } public string End
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;
}
公共静态列表GetItems(SharePointContext spContext,CamlQuery CamlQuery)
{
列表项=新列表();
//var spContext=SharePointContextProvider.Current.GetSharePointContext(HttpContext.Current);
使用(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(irfListItem中的var irfListItem)
{
项目。添加(
新伊尔菲坦
{
Title=irfListItem[“Title”].ToString(),
StartDate=irfListItem[“StartDate”]。ToString(),
EndDate=irfListItem[“EndDate”]。ToString(),
});
}
}
其他的
{
项目。添加(
新伊尔菲坦
{
Title=“空”,
StartDate=“空”,
EndDate=“空”
});
}
}
}
退货项目;
}
在我的自定义控制器(称为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);
}
//获取:Sharepoint
[SharePointContextFilter]
公共行动结果索引()
{
var spContext=SharePointContextProvider.Current.GetSharePointContext(HttpContext);
ViewBag.Username=SharePointService.GetUserName(spContext);
CamlQuery queryProducts=新的CamlQuery();
queryProducts.ViewXml=
@"
";
列表项=SharePointService.GetItems(spContext,queryProducts);
//GetItems(spContext、queryProducts);
返回视图(项目);
}
最后,我想要的视图包含->
@foreach (AddinTest1Web.Models.IRFItem irfItem in Model)
{
<tr>
<td>@irfItem.Title</td>
<td>@irfItem.StartDate</td>
<td>@irfItem.EndDate</td>
</tr>
}
@foreach(模型中的AddinTest1Web.Models.IRFItem-IRFItem)
{
@irfItem.头衔
@伊尔菲特姆起始日期
@irfItem.EndDate
}
我没有收到任何错误,但我的表总是空的……我甚至在GetItems中添加了else部分来创建一个显示为空的项,以便我知道这是与sharepoint相关的问题还是其他问题。老实说,我的MVC经验并不多(一周前才开始学习,但我是那种在实践中学习的人)
有人看到这里有什么问题吗?我遵循了一个教程,做了一些自己的小改动
参考:
任何形式的提示都将非常感谢,谢谢
编辑:我跳过了这个错误,给了应用程序更多的权限(为了安全起见,我可以列出和浏览),并且我正在返回结果,但是我无法创建项目,因为executeQuery没有按时完成。你知道怎么推迟吗?我记得我在过去的任务中遇到了一个大问题,所以我不知道从哪里开始 我会将代码GetItems()移动到单独的Helper类中,然后在其中放置一个断点以查看它是否正在触发 如果您没有收到任何错误,并且返回的数据总是空的,那么这就意味着代码的某些部分没有执行(同步或异步问题?好吧,所以我修复了这个问题(与此抗争了几个小时,非常简单,我现在就想打自己) 如果有人遇到此问题-> 为什么我的列表没有获得任何项目(即使没有ERORR)->没有为应用程序提供足够的权限。通过授予完整列表权限和完整web权限进行修复 为什么我的foreach给出了一个错误->显然有一列的名称不同。我通过尝试这段代码(这显然更好,因为它会抛出一个错误,而不是从列表中获取所有内容)->
我认为应该将问题转移到SharePoint特定的站点,在
foreach(irfListItems中的var irfListItem)
处放置一个调试点,然后查看SharePoint是否在FieldValues中返回任何值。这将是一本字典。嗯……是的。我在调试方面不是很有经验,但我认为看到“计数0”意味着应用程序没有从SP获取任何项目?代码将被执行(我通过尝试获取sharepoint网站名称/描述并将其附加到项目中进行测试)。由于某些原因,获取列表时出现问题……我想我会将此发布到sharepoint stackexchange,也许我会找到遇到类似情况的人。显然代码确实执行了,但它没有足够的权限检索列表项(奇怪的是,我记得它为此提供了一个erorr)。现在我得到了项目,但是foreach进入的太快了,我不能附加任何东西,因为它没有被初始化,你知道我怎样才能延迟吗?
clientContext.Load(irfListitems,
itemss => itemss.Include(
item => item["Title"],
item => item["StartDate"],
item => item["EndDate"]
));