在ASP.NET MVC3中将多个视图组合在一起
Combining multiple views together in ASP.NET MVC3
我现在在ASP.NET MVC3中设置了一个站点,但所有内容的布局都针对移动设备进行了优化。
我现在想将一些现有视图组合在一起,以利用桌面浏览器或平板电脑中的额外屏幕空间。
我现在有两个视图,一个显示链接列表,另一个显示每个链接生成的一些内容;这两个视图都由单独的控制器处理。这是列表视图(简化)。它使用了一个布局页面,所以当在布局中调用@RenderBody()
时,就会显示这个页面(我的第二个视图也是这样工作的,使用相同的布局文件)。
@model IEnumerable<CommandCenterEntity>
@{
if (Request.Browser.IsMobileDevice) {
Layout = "~/Views/Shared/_LayoutMobileContent.cshtml";
}
else {
Layout = "~/Views/Shared/_LayoutDesktop.cshtml";
}
}
<ul data-role="listview" id="commandcenterlist" data-filter="true" data-inset="true" data-theme="b">
@foreach (var entity in Model)
{
<li>
@Html.CommandCenterLinks(@entity, x => Url.Action("Index", "Worksheet", new { ParentId = @entity.ID_Item }))
</li>
}
</ul>
CommandCenterLinks辅助对象仅根据实体的某些属性生成一个包含不同图标的"a"标记。
我希望以这样一种方式组合我的视图,即当我单击列表中的链接(位于屏幕左侧的div标记中)时,生成的内容将显示在右侧的单独div标记中。
我希望我可以重用移动布局中使用的相同操作/控制器,所以我尝试使用jQuery拦截列表上的点击事件,并捕获操作返回的数据,并将其注入div:
$(document).on("click", "#commandcenterlist a", function (e) {
$.mobile.showPageLoadingMsg();
$.ajax({
url: this.href,
success: function (data) {
$.mobile.hidePageLoadingMsg();
$("#desktopContentPane").html(data);
}
});
return false;
});
然而,我在ajax成功处理程序中返回的数据包含完整的html页面
<!DOCTYPE html>
<html>
<head>...</head>
<body>...</body>
</html>
当我只想要在布局的@RenderBody()
调用中生成的内容时。我尝试将控制器方法更改为return PartialView("Index");
,但它给出了相同的结果。有没有办法让我只看到那部分景色?或者有没有更干净、更"MVC"的方式来实现这一点?
最好的选择是从单独的控制器操作返回部分视图。所以,为了让它发挥作用,我会改变一些事情:
- 获取您想要共享的内容(无论您想在div for desktop中显示什么),并将其放在局部视图中
- 创建一个只返回此部分视图的控制器操作(使用PartialView方法并传入部分视图名称),并在桌面版本中从javascript调用它
- 在移动版本的视图中,可以使用RenderPartial方法将部分视图中的内容包括在移动页面中
相关文章:
- 如何使用javascript从主svg对象动态创建svg视图框
- 正在使用$location.path(.)路由ng视图
- angular.js没有'无法在PhoneGap中处理视图标记
- 如何包含特定于每个视图angularjs的javascript文件
- 在ASP.NET MVC3中将多个视图组合在一起
- 在组合框筛选后执行回调网格视图
- 框架7:拆分视图降级到标签栏?(组合示例)
- Backbone.js在哪些方面不支持组合视图
- 杜兰达尔嵌套视图组合
- 获取从视图到控制器的值组合框 extJ
- DurandalJs:一种通用解决方案,用于将焦点放在组合视图上的第一个输入元素上
- 在视图中使用compile in指令和ng repeat的组合会阻止正确更新范围元素列表
- 在剑道界面中,无法根据组合框选择正确地填充剑道树视图
- 组合优于继承,这是向视图添加额外功能而不诉诸继承的更好方式
- Aurelia组合元素视图模型,未调用configureRouter
- 为单个状态组合嵌套视图和多个视图
- 如何在视图中设置组合框的选定字段
- Backbone.js:组合多个模型的复杂视图
- 只有在DurandalJS中激活了所有组合模块后,才能附加视图
- 如何组合我的“桌面视图”?带有我的移动视图的HTML文件jQuery移动文件