我从SharePoint获取一个列表,并将其保存到C#列表中。我将该列表发送到PartialView,并进行Foreach来显示带有包含其ID的编辑按钮的项目。
return PartialView("IRFList", items);
<h5>@Html.ActionLink("Edit", "Edit", new { id = item.Id }, new { @class = "badge badge-primary editIRFBut" })</h5>
PartialView已加载到索引主体上。如果单击编辑,则可以进入编辑页面,一切正常。 我还有一个“新建项目”按钮,该按钮使用$ .post与创建项目的AddItem控制器联系。成功后,我将重新加载部分视图->
$.ajax({
url: listUrl,
type: "GET",
dataType: "html",
success: function (data) {
$('.irfListPartial').html(data);
},
});
一切正常,但是在PartialView重新加载后,我的链接按钮有问题。
我的网址类似于“ example.com?SPHostUrl=https .....”。当我第一次加载索引时,编辑按钮包含“?SPHostUrl”,但是当我重新加载PartialView时,它们会丢失该部分URL。
我实际上需要该URL才能调用共享点,我的问题是...。 重新加载部分视图后,如何确保我的“编辑按钮”链接的URL中包含SPHostUrl?
编辑:已更新,便于根据Shyju的答案阅读。
public ActionResult IRFList()
{
var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext);
List<IRFItem> items = SharepointService.GetItems(spContext);
ViewBag.SPHostUrl = SharePointContext.GetSPHostUrl(HttpContext.Request).AbsoluteUri;
return PartialView("IRFList", items);
}
对于“部分编辑”按钮
<h5>@Html.ActionLink("Edit", "Edit", new { id = item.Id, SPHostUrl = ViewBag.SPHostUrl }, new { @class = "badge badge-primary editIRFBut" })</h5>
答案 0 :(得分:1)
您需要将此querystring项传递到操作方法,该操作方法将返回部分视图结果,并且在该操作方法内部,您将再次将其传递到部分视图,在此您将使用该视图创建编辑链接href
值。
这是一个简单的示例,该示例使用ViewBag
将SPHostUrl
参数的值传递给视图。如果您有视图模型,请使用该模型来传递值,而不要使用ViewBag。
public ActionResult ListPartial(string SPHostUrl)
{
var posts = db.Posts.ToList();
ViewBag.SPHostUrl = SPHostUrl;
return PartialView(posts);
}
在您的局部视图中
@model List<YourNamespace.Post>
<div>
@foreach (var item in Model)
{
<h4>@item.Title<h4>
<h5>@Html.ActionLink("Edit", "Edit",
new { id = item.Id, SPHostUrl = ViewBag.SPHostUrl },
new { @class = "badge badge-primary editIRFBut" })
</h5>
}
</div>
现在您要做的就是在进行Ajax调用时发送SPHostUrl
查询字符串。为此,您可以再次使用相同的方法将SPHostUrl
值传递到主视图(在该视图中,我们通过ajax加载部分视图结果)
public ActionResult Index(string spHostUrl)
{
ViewBag.SpHostUrl = spHostUrl;
return View();
}
我再次在这里使用ViewBag
在操作方法和视图之间传递数据。如果您有视图模型,请向其添加一个新属性,然后使用该属性将参数值传递给您的视图。
现在,在您的视图中,在构建ajax调用所需的URL时使用此ViewBag项。我喜欢依靠Url.Action
方法来生成正确的action方法的相对链接值。在下面的示例中,我在剃刀视图中调用Url.Action方法,并将该结果(返回部分视图的action方法的url)作为html5数据属性值存储到我们的容器div中。
<div class="irfListPartial"
data-url="@Url.Action("ListPartial",new { spHostUrl=ViewBag.SpHostUrl})">
</div>
剃刀执行上述代码时,将生成如下所示的HTML标记。
<div class="irfListPartial" data-url="/Posts/ListPartial"></div>
进行ajax调用时,我们要做的就是读取div的data
属性值,并将其用于ajax调用。
var $partial = $('.irfListPartial');
var listUrl = $partial.data("url");
$.ajax({
url: listUrl,
success: function (data) {
$partial.html(data);
}
});
现在,只要使用spHostUrl
查询字符串调用您的主要操作方法,您的ajax方法就会将该值传递给您的部分视图操作方法,该方法将使用该值来创建编辑链接网址。