我有一个控制器,它接受索引操作的几个参数。此控制器通过将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; ????????
如果有这种情况,请告诉我你会做什么
答案 0 :(得分:1)
我在应用中有类似的东西。
我使用PartialViews,可以通过普通页面请求和ajax调用加载。
加载页面后,所有内容都会加载
当某些内容发生变化时,会进行ajax调用,并用相同的类名替换该部件。