我正在开发一个网站,该网站应该在桌面和移动浏览器上都能很好地显示和响应。因此,我使用 MVC 4 的优秀特性在使用 .mobile.cshtml 扩展名的视图之间切换。由于我熟悉 jQuery,我想将 jQuery Mobile 用于移动视图。
因此,我创建了一个带有标准 html、标题和正文元素的 _Layout.Mobile.cshtml 视图。body 元素包含以下内容:
<body>
<div data-role="page" id="@ViewBag.PageId">
<div data-role="header" data-position="fixed">
<h1>@ViewBag.Title</h1>
@Html.ActionLink("Indstillinger", "Manage", "Account", null, new { @class= "ui-btn-right", data_icon = "gear"})
<div data-role="navbar">
@RenderSection("PageNavigation", required: false)
</div>
</div>
<div data-role="content" class="map-content">
@RenderBody()
</div>
</div><!-- /page -->
</body>
PageNavigation 部分用于放置一个 jQuery Mobile 持久导航栏,其中包含指向两个不同视图的两个项目。
第一个视图如下所示:
@model MyModel
@{
ViewBag.Title = "Some title";
ViewBag.PageId = "pageuniquename";
Layout = "~/Views/Shared/_Layout.Mobile.cshtml";
}
@section PageNavigation
{
<ul>
<li>@Html.ActionLink("List display", "Index", "Controller",new { @class= "ui-btn-active ui-state-persist"})</li>
<li>@Html.ActionLink("Map display", "Map", "Controller")</li>
</ul>
}
@Html.Partial("~/Views/Shared/Mobile/_TestPartial.cshtml", Model)
第二个视图如下所示:
@model MyModel
@{
ViewBag.Title = "Map display";
ViewBag.PageId = "mappage";
Layout = "~/Views/Shared/_Layout.Mobile.cshtml";
}
@section PageNavigation
{
<ul>
<li>@Html.ActionLink("List display", "Index", "Controller")</li>
<li>@Html.ActionLink("Map display", "Map", "Controller",new { @class= "ui-btn-active ui-state-persist"})</li>
</ul>
}
<div id="mapCanvas"></div>
谷歌地图是由布局页面中的这段代码初始化的:
$(document).on("pageshow", "#mappage", initializeMap);
地图初始化很好,我可以添加标记。我可以通过导航栏在页面之间切换 - 尽管有时由于某种原因似乎无法调整地图大小。
但地图根本不响应任何事件——甚至无法缩放或平移。
如您所见,我尝试通过在 ViewBag 中设置 PageId 属性并在布局页面中呈现该 ID 来为页面提供唯一 ID。而且我可以看到每个页面的标记都正确加载——至少看起来是这样。
我还没有弄清楚,是每个视图都应该连接到布局还是只应该是第一个视图。使用 MVC 4 开发 jQuery 移动网站的正确方法是什么?
编辑 在 iPad 上访问该站点时,这些事件似乎可以正常触发 - 但是当我通过带有 iPad 用户代理的桌面浏览器 (Chrome) 访问该站点时 - 没有触发任何事件。我仍然希望您对如何在 MVC4 中为 jQuery Mobile 构建页面提出意见