我正在从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加载在索引body.If上,我点击编辑,让我编辑页面,一切正常。我还有一个“AddItem”按钮,它使用$.post与创建项目的AddItem控制器联系。成功后,我将部分视图重新加载为这样的->
$.ajax({
url: listUrl,
type: "GET",
dataType: "html",
success: function (data) {
$('.irfListPartial').html(data);
},
});所有操作都很好,但是在PartialView重新加载之后,我的链接按钮出现了问题。
我的网址有点像“example.com?SPHostUrl=https.”。当im第一次加载索引时,编辑按钮包含"?SPHostUrl",但当我重新加载PartialView时,它们丢失了URl.URL的这一部分。
我实际上需要那个URL来给sharepoint打电话,我的问题是.如何确保在重新加载部分视图后,我的Edit Button链接在其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>发布于 2018-08-05 17:06:49
您需要将这个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 )存储为容器div的html5数据属性值。
<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方法就会将该值传递给部分视图操作方法,后者将使用该值创建编辑链接urls。
https://stackoverflow.com/questions/51696261
复制相似问题