asp.net mvc 的 视图(view )的模块化开发
程序员文章站
2022-04-15 12:48:58
目前所在项目有一个视图,几个模块都涉及到,对应不同的开发人员,虽然有SVN在管理,但代码冲突时有发生。并且大家的代码挤于其中,逻辑比较容易混乱。
将不同部件独立出去,实有必要。
分...
目前所在项目有一个视图,几个模块都涉及到,对应不同的开发人员,虽然有SVN在管理,但代码冲突时有发生。并且大家的代码挤于其中,逻辑比较容易混乱。
将不同部件独立出去,实有必要。
分离方式,我知道的有 3 种:
1、利用JS动态加载子视图
将分离内容放置在一个视图里面,视图还可以对应有控制器。主视图加载过程中,或者运行过程中,再用JS去请求、加载这个子视图:
var p = ... var url = @Url.Content(~/controller/GetDataByView?id=) + id; getViewRequest(url, {}, function(data){ p.empty().html(data); } ); function getViewRequest(url, params, onsuccess, onerror) { $.ajax( { type: 'get', url: url, data: params, contentType: text/html; charset=utf-8, success: function (data) { if (onsuccess != undefined && onsuccess != null) { onsuccess(data); } }, error: function (data) { if (onerror != undefined && onerror != null) { onerror(data); } } }); }
2、Html.RenderAction
这个与1的区别主要是加载方式不同。1是主视图出来后,在前端用JS动态加载,会比较迟才出来;2是与主视图一同输出到前端。
2与3的区别在于,2的数据来源于控制器,3的数据来源于主视图。3没有控制器。
有关Html.RenderAction,可见拙作:
www.2cto.com
3、Html.RenderPartial
相当于shtml里面的inclue,。只是接入一个视图,该视图并没有控制器。数据可由主视图传送给它。
下面是具体的例子:
主视图控制器:
[csharp] public ActionResult Index() { …… //ViewTag是自定义类 ViewBag.TagArray = new IList[2]{list,mylist}; return View(); }
主视图:
[html]
@{Html.RenderPartial(BottomTags, (Object)ViewBag.TagArray);}
其中,BottomTags是子视图名称(BottomTags.cshtml),ViewBag.TagArray是传给它的Model。一定要强制转换,不能直接用ViewBag。
子视图BottomTags
[csharp] @using System.Text; @{ //接收Model。在视图里面,Model也是一个类似Html一样的东西,无须定义就可以使用。实际上,Model是ViewData的属性。 IList[] array = (IList[])Model; IList list = array[0]; IList mylist = array[1]; } …… <script type=text/javascript>……</script>
如此,子视图可无缝接合于主视图矣。
推荐阅读
-
Android开发中获取View视图宽与高的常用方法小结
-
ASP.NET MVC5网站开发之用户角色的后台管理1(七)
-
ASP.NET MVC5网站开发之用户资料的修改和删除3(七)
-
ASP.NET MVC5网站开发之业务逻辑层的架构和基本功能 (四)
-
ASP.NET MVC从视图传参到控制器的几种形式
-
ASP.NET MVC5网站开发之业务逻辑层的架构和基本功能 (四)
-
ASP.NET MVC5网站开发之用户资料的修改和删除3(七)
-
ASP.NET MVC5网站开发之用户角色的后台管理1(七)
-
ASP.NET MVC从视图传参到控制器的几种形式
-
我来告诉你:VS2019开发ASP.NET Core 3.0 Web项目,修改视图后,刷新浏览器看不到修改后的效果怎么处理