首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# MVC -重新加载(获取) PartialView丢失了hrefs上的完整URL参数

C# MVC -重新加载(获取) PartialView丢失了hrefs上的完整URL参数
EN

Stack Overflow用户
提问于 2018-08-05 16:37:33
回答 1查看 409关注 0票数 1

我正在从SharePoint获得一个列表并将其保存到一个C#列表中。我将该列表发送到PartialView,并执行Foreach操作,使用包含其ID的编辑按钮显示项目。

代码语言:javascript
复制
        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控制器联系。成功后,我将部分视图重新加载为这样的->

代码语言:javascript
复制
        $.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的答案更新以便于阅读。

代码语言:javascript
复制
    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);
    }

和部分编辑按钮

代码语言:javascript
复制
        <h5>@Html.ActionLink("Edit", "Edit", new { id = item.Id, SPHostUrl = ViewBag.SPHostUrl }, new { @class = "badge badge-primary editIRFBut" })</h5>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-05 17:06:49

您需要将这个querystring项传递给操作方法,该方法返回部分视图结果,在该操作方法中,您将再次将其传递到部分视图,在该视图中,您将使用它创建编辑链接href值。

下面是一个快速示例,它使用ViewBagSPHostUrl参数的值传递给视图。如果您有一个视图模型,那么使用它来传递值,而不是ViewBag。

代码语言:javascript
复制
public ActionResult ListPartial(string SPHostUrl)
{
    var posts = db.Posts.ToList();
    ViewBag.SPHostUrl = SPHostUrl;
    return PartialView(posts);
}

在你的部分观点中

代码语言:javascript
复制
@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加载部分视图结果)。

代码语言:javascript
复制
public ActionResult Index(string spHostUrl)
{
   ViewBag.SpHostUrl = spHostUrl;
   return View();
}

在这里,我再次使用ViewBag在操作方法和视图之间传递数据。如果您有一个视图模型,那么向它添加一个新属性,并使用它将参数值传递给您的视图。

现在,在您的视图中,在构建ajax调用所需的url时使用这个ViewBag项。我喜欢依赖于Url.Action方法来生成到action方法的正确的相对链接值。在下面的示例中,我在剃刀视图中调用Url.Action方法,并将其结果(返回部分视图的action方法的url )存储为容器div的html5数据属性值。

代码语言:javascript
复制
<div class="irfListPartial" 
     data-url="@Url.Action("ListPartial",new { spHostUrl=ViewBag.SpHostUrl})">
</div>

当剃须刀执行上述代码时,它将生成如下所示的HTML标记。

代码语言:javascript
复制
<div class="irfListPartial" data-url="/Posts/ListPartial"></div>

在进行ajax调用时,我们所要做的就是读取div的data属性值,并将其用于ajax调用。

代码语言:javascript
复制
var $partial = $('.irfListPartial');
var listUrl = $partial.data("url");

$.ajax({
         url: listUrl,               
         success: function (data) {
           $partial.html(data);
         }
});

现在,只要使用spHostUrl查询字符串调用主操作方法,ajax方法就会将该值传递给部分视图操作方法,后者将使用该值创建编辑链接urls。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51696261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档