浅谈ASP.NET MVC在前端开发中的局限性

ASP.NET MVC

如果你还没有接触过后端的MVC框架的话,不妨先看看下面这段ASP.NET MVC代码并且了解一下后端MVC的工 作原理。它摘自ASP.NET MVC教程中非常著名的项目MVC Music Store一段Controller组件代码:

public class StoreManagerController : Controller
{
    private MusicStoreEntities db = new MusicStoreEntities();
    // GET: /StoreManager/
    public ViewResult Index()
    {
        var albums = db.Albums.Include(a => a.Genre).Include(a => a.Artist);
        return View(albums.ToList());
    }

    // GET: /StoreManager/Details/5

    public ViewResult Details(int id)
    {
        Album album = db.Albums.Find(id);
        return View(album);
    }
}

我们知道Controller的职责之一是负责响应用户在视图上的行为,而具体每个行为应如何进行响应,需要 落实到Controller具体的方法上,这个方法我们可以称之为action。上面代码中的两个公开方法Index()与 Details()就是两个action。它们都属于StoreManager这个Controller。如果你有使用过前端的Ember.js的话 ,应该对这两个概念非常熟悉。

但问题来了,如何将用户在视图上的行为,与响应行为的方法action关联起来?甚至与Controller关联起 来? URL便是方法之一。上面代码每个action上的注释便代表这个这个action对应的URL。也就是说,当用户 点击该URL时,框架中的Router服务便能通过URL解析出应该调用哪个Controller及该Controller下的哪一个 action进行响应,以上面的例子为例,可以知道URL的规则为{controller}/{action}/{id}。

那么响应的结果应该是什么呢?从上面的代码ViewResult和return View()两处可以看出,两个action返回 的都是新的视图。

举一个最熟悉的现有MVC站点的例子便是github。你会发现你在github网站上的每一处点击都有唯一的URL 对应,每一次交互的结果都是服务器返回新的页面。它使用javascript非常少,比如当你选择编辑时,它也会 跳转到一个新的页面,而非在当前页弹出一个编辑框。

为什么首先要聊这么多的服务器端MVC框架的特性。因为接下来回过头来看前端的MVC框架时,你会发现有 非常多的差异之处。

Javascript MVC

从上面可以看出,服务器端的MVC框架服务的是整个站点,它依靠不断的返回页面来响应用户请求,因此 Router服务至关重要。而使用MVC框架的前端页面,大多数是Single Page Application,甚至还不如单页面, 只是页面上的某一个组件,比如一个Slide。因此将用户的行为转化为URL是不现实。你或许会说的确无法生产 新的页面,那么降低页面粒度如何呢?也就是说在服务器端一个URL映射的是一个页面,那么我们将URL映射为 页面的某个区域或者功能呢?

比如以下面这段Backbone.js的TodoList应用Router为例:

var TodoRouter = Backbone.Router.extend({
    routes: {
        'todo/add': 'add', // 新增项
        'todo/edit/:id': 'edit', // 编辑项
        'todo/remove/:id': 'remove', // 删除项

        'filter/completed': 'filterCompleted', // 过滤出已完成
        'filter/uncompleted': 'filterUncompleted' // 过滤出未完成
    }
    // Todo
});

如果依照这样Route规划,我们希望当用户输入http://example.com#todo/add时,我们弹出的是一个新增 输入框;而当用户输入http://example.com#todo/edit/123456页面出现编辑id为123456的这条记事的编辑框 。这样我们便将URL映射的页面粒度降低为输入框粒度。

但是这样会引起另一个问题,注意上面route的差别:todo/域名下操作的是单条的记录,而filter/域名下 操作的是对列表进行筛选。所以还不得不考虑一种情况,如果用户想在筛选的情况下可否对每一项进行操作? 如果允许的话,参考排列组合,route是否需要新增为2 x 3 = 6项?如新增 http://example.com#filter/completed/todo/add这样的路由。

这样的设定明显是不合理的。之所以会产生这样的问题是因为对后端而言URL与页面是一一对应的关系。而 如果降低页面粒度的话,无法将页面功能与URL对应起来,或者说如果想让URl覆盖单一页面上的所有功能的成 本太高了。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mvc
, 页面
, action
, controller
, edit control
, 用户
, url前端数据
, 框架net数据存储前端
, 一个
, MVC站点
, controller跳转url
, js前端路由
js前端路由原理
,以便于您获取更多的相关知识。

时间: 2024-10-06 05:47:11

浅谈ASP.NET MVC在前端开发中的局限性的相关文章

浅谈ASP.NET MVC 3中如何使用Model

昨天博客发了新文章,讲一下我对如何使用MVC中的Model的看法,不是什么大技术,当是一个技术讨论^^ 原文地址:http://www.youguanbumen.net/Article.aspx?id=79 原文: 前两天写了个文章ASP.NET MVC 3 -- Model远程验证,主要记录了一下ASP.NET MVC 3中新增的RemoteAttribute类的使用,得益于这个类,我们可以在模型中为属性配置客户端远程校验的业务,文章中给了出一个简单的实体类MyUser_Add,举了一个最常见

浅谈ASP.NET MVC应用程序的安全性_实用技巧

前言:保护Web应用程序的安全性看起来时间苦差事,这件必须要做的工作并不能带来太多的乐趣,但是为了回避尴尬的安全漏洞问题,程序的安全性通常还是不得不做的. 1.ASP.NET Web Forms开发人员   (1)因为ASP.NET MVC不像ASP.NET Web Forms那样提供了很多自动保护机制来保护页面不受恶意用户的攻击,所以阅读本博客来了解这方面的问题,更明确的说法是:ASP.NET Web Forms致力于使应用程序免受攻击.例如: 1)服务器组件对显示的值和特性进行HTML编码,

一起谈.NET技术,浅谈ASP.NET MVC

在正式的工作中使用ASP.NET MVC也有一阵子了,也看了听了很多关于ASP.NET MVC别人的想法和代码,我认为很多人对于它的理解是错误的. 在这里我只谈谈对ASP.NET MVC我的一些想法,希望大家多多讨论. 1. ASP.NET MVC区别于ASP.NET在于设计理念 我听过的关于ASP.NET  MVC的第一个看法是ASP.NET MVC最大的特点在于Controller和View的分离,当时我还不懂ASP.NET MVC是什么东西,但是当我第一眼看到这个框架时,我就认为这个观点是

浅谈ASP.NET MVC

在正式的工作中使用ASP.NET MVC也有一阵子了,也看了听了很多关于ASP.NET MVC别人的想法和代码,我认为很多人对于它的理解是错误的. 在这里我只谈谈对ASP.NET MVC我的一些想法,希望大家多多讨论. 1. ASP.NET MVC区别于ASP.NET在于设计理念 我听过的关于ASP.NET  MVC的第一个看法是ASP.NET MVC最大的特点在于Controller和View的分离,当时我还不懂ASP.NET MVC是什么东西,但是当我第一眼看到这个框架时,我就认为这个观点是

浅谈ASP.NET MVC框架

服务器端的实现原理并不复杂,不过作为解决方案的另一个关键部分,如何在客户端触发一个AJAX提交也是一个值得思考的话题. UpdatePanel的方式可谓"全自动":页面加载时将会把服务器端的Trigger信息输出至客户端,然后在客户端截获form的提交事件,并通过 UniqueID或DOM结构等方式来判断这次提交是否该转化为AJAX方式.不过在一个ASP.NET MVC页面中几乎不会出现产生PostBack的元素,相反会有大量的普通链接,它们才是AJAX更新的主要截获目标. 为此我提供

“.NET研究”专访微软MVP衣明志:走进ASP.NET MVC 2框架开发

日前微软已经发布ASP.NET MVC 2框架RC版,究竟这次RC版本的发布对于WEB开发者带来怎样的改变?以及未来ASP.NET MVC 2正式版还会有哪些改进?带着这样的问题,我们51CTO记者彭凡专门采访了微软MVP衣明志老师.ASP.NET MVC是微软官方提供的MVC模式编写ASP.NET WEB应用程序的一个框架. MVP专访人物介绍 衣明志,蝉联五届微软MVP,烟台.NET俱乐部主席,现主要从事.NET平台下的Web应用开发.解决方案.构架设计及技术培训等工作.   照片居中者为衣

专访微软MVP衣明志:走进ASP.NET MVC 2框架开发

日前微软已经发布ASP.NET MVC 2框架RC版,究竟这次RC版本的发布对于WEB开发者带来怎样的改变?以及未来ASP.NET MVC 2正式版还会有哪些改进?带着这样的问题,我们51CTO记者彭凡专门采访了微软MVP衣明志老师.ASP.NET MVC是微软官方提供的MVC模式编写ASP.NET WEB应用程序的一个框架. MVP专访人物介绍 衣明志,蝉联五届微软MVP,烟台.NET俱乐部主席,现主要从事.NET平台下的Web应用开发.解决方案.构架设计及技术培训等工作. 照片居中者为衣明志

浅谈ASP中Request对象获取客户端数据的顺序

request|对象|客户端|数据 浅谈ASP中Request对象获取客户端数据的顺序 /**描述:在使用ASP Request对象时需要注意的小问题作者:慈勤强Email : cqq1978@yeah.net**/ 在ASP中Request对象是获取客户端提交数据的一个很重要的对象,大家对他也是非常熟悉了.虽然如此,还是经常有人问我下面的几种写法有什么不同,到底应该怎么写?strMessage = Request("msg")strMessage = Request.Form(&qu

Web前端开发中的MCRV模式

摘要 针对前端开发中基于ajax的复杂页面开发所面临的代码规模大,难以组织和维护,代码复用性.扩展性和适应性差等问题,本文尝试以MVC思想为基础,结合Web前端开发中"内容-结构-表现-行为"相分离的开发标准,提出一种将Web页面代码分为视图(View,页面静态部分,包括内容.结构.表现).模型(Model,负责数据缓存.数据校验与本地逻辑处理.发起ajax请求).控制器(Controller,负责用户和系统事件响应.模型和渲染器调度).渲染器(Renderer,对视图的渲染,控制器与