使用数据呈现视图作为查询字符串参数

时间:2017-05-10 17:11:19

标签: c# jquery ajax asp.net-mvc razor

我有一个控制器,它接受索引操作的几个参数。此控制器通过将lync to sql查询作为PageList来返回视图。 return View(agreements.ToPagedList(pageNumber, pageSize));

我在此页面上有一张地图,用户可以使用该地图进行缩放和平移。如果重新加载页面,则地图会重新加载到其默认范围。我有一些输入,我发布范围参数作为用户操作地图。

我需要的是能够捕获这些参数,以便在重新加载/渲染视图时...它使用查询字符串中的extents参数进行渲染。我编写了处理地图的javascript,以便能够从URL中提取这些参数并缩放到地图上的适当位置。

我有6个输入由地图javascript操作。

<input type="text" class="extent-i vertical-align-center" readonly id="xmin-h" />
<input type="text" class="extent-i" readonly id="ymin-h" />
<input type="text" class="extent-i vertical-align-center" readonly id="xmax-h" />
<input type="text" class="extent-i" readonly id="ymax-h" />
<input type="text" class="extent-i" readonly id="wkid-h" />
<input type="hidden" id="json-h" />

这些对应于XMIN,YMIN,XMAX,YMAX,WKID(空间参考),json是包含所有上述内容的对象。

使用JQUERY和MutationObserver我能够检测到这些变化。然后我使用ajax将它们发送到控制器。

function sendExtent(xmin,ymin,xmax,ymax,wkid){
var data = {
    XMIN: xmin,
    YMIN: ymin,
    XMAX: xmax,
    YMAX: ymax,
    WKID: wkid

}

$.ajax({
   url: '@Url.Action("Index","Home")',
   data: data
});

var extentJson = $("#json-h").val();
var json = JSON.parse(extentJson);

     XMIN = json["XMIN"];
     YMIN = json["YMIN"];
     XMAX = json["XMAX"];
     YMAX = json["YMAX"];
     WKID = json["WKID"];
  }

  sendExtent(XMIN, YMIN, XMAX, YMAX, WKID);

控制器如下:

  public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page, double? XMIN, double? YMIN, double? XMAX, double? YMAX, int? WKID, int? AGMT_NUM, string DisplayAs)
        {
            ViewBag.DisplayAs = DisplayAs;
            ViewBag.XMIN = XMIN;
            ViewBag.YMIN = YMIN;
            ViewBag.XMAX = XMAX;
            ViewBag.YMAX = YMAX;
            ViewBag.WKID = WKID;
            (...)
            (...)
            // some logic to manipulate data based sortOrder etc...


            int pageSize = 10;
            int pageNumber = (page ?? 1);
            return View(agreements.ToPagedList(pageNumber, pageSize));

ajax调用不会重新加载页面,但是它确实执行了,我可以确认值成功通过。做动态映射的本质,我不希望视图每次都重新加载,因此这种行为是好的。

我需要的是如何管理这些范围更改,以便在刷新或呈现视图时,例如,当表被排序或分页时,范围参数将发布到类似于blah blah/?blah blah &XMIN=1234&YMIN=5678.....etc...的URL

更新

以下是导致重新呈现页面的用户操作示例。当用户从下拉列表中选择某些内容时会触发它。

/button>
<ul class="dropdown-menu" id="display-as-ul">
    <li>@Html.ActionLink("Agreement Type", "Index", new {DisplayAs = "Type", page = ViewBag.Page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter })</li>
    <li>@Html.ActionLink("Leese Expiration", "Index", new {DisplayAs="Expiration", page = ViewBag.Page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter})</li>
</ul>

这会将适当的参数传递给控制器​​,然后控制器重新加载页面。如上所示,“DisplayAs”参数然后存储在URL中。与我尝试使用的范围类似,地图足够智能从网址中提取该参数并操纵显示的内容。

这可以在这里工作,因为工作流程来自VIEW - &gt;控制器 - &gt; VIEW(带URL) - &gt;嵌入式地图..

这与范围问题有两点不同:     1)每次扩展更改时页面都不需要呈现,params只需要在其他内容导致页面呈现/重新加载时发布。     2)工作流程如下:EMBEDED MAP - &gt;查看 - &gt; ????????

如果有这种情况,请告诉我你会做什么

1 个答案:

答案 0 :(得分:1)

我在应用中有类似的东西。

我使用PartialViews,可以通过普通页面请求和ajax调用加载。

加载页面后,所有内容都会加载

当某些内容发生变化时,会进行ajax调用,并用相同的类名替换该部件。