【问题标题】:Render Views with Data as Query Strings Parameters使用数据作为查询字符串参数呈现视图
【发布时间】:2017-05-10 17:11:18
【问题描述】:

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

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

我需要的是能够捕获这些参数,以便在重新加载/渲染视图时......它使用查询字符串中的范围参数进行渲染。我编写了处理地图的 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 &amp;XMIN=1234&amp;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 中。类似于我试图对范围做的事情,地图足够聪明,可以从 url 中提取该参数并操纵显示的内容。

这在这里有效,因为工作流程从 VIEW -> CONTROLLER -> VIEW(w/URL) -> EMBEDED MAP..

这在两个方面与范围问题不同: 1)页面不需要在每次extent改变时渲染,参数只需要在其他原因导致页面渲染/重新加载时发布。 2) 工作流程如下:EMBEDED MAP -> VIEW -> ????????

如果情况不妙,请告诉我你会怎么做

【问题讨论】:

  • 您对负载进行计算,然后在重新/渲染部分时也需要这样做?
  • 我没有使用局部视图,但也许我应该使用..

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


【解决方案1】:

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

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

页面加载完毕,一切都加载完毕

当某些事情发生变化时,会进行 ajax 调用,然后我用相同的类名替换该部分。

【讨论】:

  • 你能举个例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多