【ASP.NET】Webform与MVC开发比较

    去年暑假开始,跟着一个项目,开始接触到了MVC,那时候,自己对Webform的开发还没有在项目中真正实践过,没有什么过渡,就跳跃到MVC开发下了。而最近,在维护的一个项目中,并没有使用MVC开发,用的是Webform开发。这两次经历的结合,引发了我对本篇博客标题的思考,即Webform与MVC开发比较。

   
【Webform下的开发】

    通过这次对ASP.NET Webform的重用,我发现它更接近可视化设计,换句话说,我只需要从设计面板中拖拽控件即可完成用户界面设计,接着在behind code中实现逻辑代码即可完成最后的Web页面功能。

    下面便是我新增加的一个页面,在程序设计中我便可以看到:

    当前台新增了一个按钮时,后台代码中便生成一个button对象,我只需要在按钮的点击事件中实现事件响应代码即可。

    利用Webform开发,*.aspx文件负责前台页面布局的设计,*.aspx.cs文件是一系列事件响应代码。

   
部分SuggestionResult.aspx文件代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SuggestionResult.aspx.cs" Inherits="WEB.survey.SuggestionResult" %> 

 <div class="search block">
        <div class="h">
            <span class="icon-sprite icon-list"></span>
            <h3>
                查询问卷结果</h3>
            <div class="bar">
            </div>
        </div>
        <div class="tl corner">
        </div>
        <div class="tr corner">
        </div>
        <div class="bl corner">
        </div>
        <div class="br corner">
        </div>
 </div> 

   
部分SuggestionResult.aspx.cs文件代码:

namespace WEB.survey
{
    public partial class SuggestionResult : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //页面第一次加载时
            //领导登陆成功,判断领导是否登陆成功
            if (Session["UserID"] != null)
            {
                //绑定学院信息
                BindData();
            }
            else
            {
                //Session中没有此用户,跳转到登陆界面,让领导重新登陆系统
                Response.Redirect("../AdminLogin.aspx");
            }
        }
} 

   
【MVC下的开发】

    以最近一直在学习的ITOO项目来说,前台用的便是MVC。

    下面是前台的一个页面,我们在项目中并不能查看到它的设计布局:  

    利用MVC开发,View下的*.cshtml文件是负责前台页面布局,而Controller下的*.cs文件是对应的逻辑代码。

   
部分Student下的Index.cshtml文件代码:

@using Microsoft.CSharp;
@{
    ViewBag.Title = "学籍维护";
    Layout = "~/Views/Shared/EasyUILayout.cshtml";
}
 <div id="a">
        <input id="txtSearch" onkeyup="AutoSuggest(this, event, document.getElementById('urllink').value);" value="学号/姓名/性别/班级" class="gray" onclick="    if (this.value == '学号/姓名/性别/班级') { this.value = ''; this.className = 'black' }" onblur="    if (this.value == '') { this.value = '学号/姓名/性别/班级'; this.className = 'gray' }" style="width: 300px; height: 25px; margin-bottom: 30px;" autocomplete="off" onkeydown="    if (event.keyCode == 13) { doSearch(); }" />

        <a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-search' ,plain:true"  onclick="doSearch()">查询</a>
        <input type="hidden" name="toDate" value="toDate" id="toDate" />
        <input id="urllink" type="hidden" value="/Student/GetResults" />
        <div id="auto" style="position: absolute; z-index: 99; width: 300px; display: none; border: 1px solid #817F82; background-color: #FFFFFF;">
        </div>
    </div> 

   
部分StudentController.cs文件下的代码:

namespace ITOO.BasicStudentClient.Controllers
{
    public class StudentController : Controller
    {
        IBasicStudentService studentService = ServiceFactory.GetStudentInfosService();
        public ActionResult Index()
        {
            return View();
        }
        public ActionResult StudentInfo()
        {
            return View();
        }
    }
} 

    清楚了两种开发的浅层次的布局后,下面我们就进入一些深层次的比较。

   
【Webform与MVC的较量】

   
(1)运行机制

    可以说,Webform下的开发是一种基于视图的设计方案,当用户发出请求后,先访问视图页面"*.aspx",后台逻辑代码在"*.aspx.cs"中,页面生命周期中会将页面的结果返回给用户。

          

    如果利用MVC的思想,一种基于用户交互行为的方案,那么请求的流程便是如下所示:

          

   
(2)耦合关系

    Webform下的开发,*.aspx和*.aspx.cs两个文件是紧紧捆在一起的,我们很难将其分离,也很难服用,这样便导致系统的耦合度很高了。

    MVC下的开发,我们可以将请求先通过Action,而不是直接通过View,action得到的数据再由控制器决定由哪个view展示,
          

    所以,我们可以很方便地控制由哪一个页面进行展示,代码如下:

public ActionResult Index(string DeviceType)
{
           if (viewType == "Mobile")
            {
                return View("MobileView");
            }
            else
            {
                return View("NormalView");
            }
}

   
(3)返回类型

    Webform开发下,由于视图view和后台代码behind code紧密耦合在一起,所以默认的返回类型就固定了,都是HTML类型。如果想改变类型就必须设置Content-type和调用Response.End方法。

    MVC开发下,如果我们创建一个Action,返回的类型由Action中指定,系统就可以在同一个action中根据不同条件输出不同的返回类型。代码如下:

public ActionResult Index(string viewType)
{
            if (viewType == "JSON")
            {
                return Json(new Customer(), JsonRequestBehavior.AllowGet);
            }
            else
            {
                return View("DisplayCustomer", new Customer());
            }
}

    其实,这两者还有很多的不同,这里也就不再一一列举了。

   
【Webform与MVC的并存】

    从上面三点看来,更倾向于发现MVC开发下的优点了,然而,这也并不代表Webform技术应该被淘汰了。ASP.NET MVC框架只是给开发者提供了开发Web应用程序的一种选择,并不是要取代Webform,这两种技术各有优缺点,开发者需要根据实际情况,选择对应的技术,有时候,也可以在同一项目中混合使用这两种技术。

   
【学习心得】

    这篇博客的内容,参考了很多别人写的文章,博客,因为很多东西自己并没有在两种开发环境下都实践过,所以自己的体会也不是特别深刻。

    最近,通过一个项目的维护,自己对ASP.NET Webform开发更加深刻熟悉了,便有了将两者比较的想法。有了实践的经验,比较之后,自己对两种开发框架还是又多了一些了解的。

时间: 2024-11-08 19:23:51

【ASP.NET】Webform与MVC开发比较的相关文章

asp.net webform或者MVC如何判断是否登录呢?

问题描述 就像百度,或者CSDN,右上角,如果登录了的就显示账号名,等级,消息.如果没有登录的就显示登录.并且在很多地方也进不了--==============================================身份验证感觉找不到个标准的来参考.我只看过WEBform的教程,而且很简单,就是每次页面LOAD事件都比对一次COOKIES或SESSION.....但我看到微软MVC2.0写的那个DEMO小MVC网站,它的验证是这种写法<%@ControlLanguage="C#&q

asp.net webform 与asp.net mvc 开发总结

asp教程.net webform 与asp.net教程 mvc 开发总结 1. 我新建立了mvc 工程 将原来网站的页面都复制过来 2. 发现 编译通不过 首先是类库文件找不到(原来在app_code文件夹下面)    解决办法:新建立一个文件夹 例如:mycode 将原来app_code文件夹下面的类  拷贝到新文件夹      (备注:mvc可能不能自动识别app_code目录) 3. 再编译 发行找不到类的问题解决了 但还有其他的问题 就是页面的后台代码找不到页面上的控件    难道是命

asp.net-请教ASP.NET MVC开发的网站,在手机浏览器上js点击事件失效的问题

问题描述 请教ASP.NET MVC开发的网站,在手机浏览器上js点击事件失效的问题 之前没有接触过手机浏览器端的东西,一直做的是web方面,最近刚做了一个新项目刚刚上线,是一个挖宝游戏,http://wabao.edushi.com 经理要求把手机端兼容性弄一下让手机端也可以正常使用,但是我发现用手机访问,很多点击事件都失效了,有一部分还是有效的,不明白为什么,我用chrome的toggle device mode,也是某些按钮是有效的某些按钮点了就没反应,console也没报错,完全不知道问

ASP.NET MVC开发人员必备的五大工具

1. Chirpy Zippy 下载地址:http://chirpy.codeplex.com/ 过去,在将JavaScript脚本和CSS文件部署到Web服务器之前,我习惯使用压缩工具进行压缩再部署,安装Chirpy后,你的脚本和CSS文件将会基于其名字自动压缩,例如,假设你有一个名叫myscript.js的脚步文件想要压缩,只要你将其重命名为myscript.yui.js,它就会调用YUI压缩程序自动压缩,压缩后的文件在解决方案资源管理器中显示为一个子项目,你可以继续查看和调试未经压缩的脚本

ASP.N“.NET研究”ET MVC开发人员必备的五大工具

1. Chirpy Zippy 下载地址:上海徐汇企业网站制作rget="_blank">http://chirpy.codeplex.com/ 过去,在将JavaScript脚本和CSS文件部署到Web服务器之前,我习惯使用压缩工具进行压缩再部署,安装Chirpy后,你的脚本和CSS文件将会基于其名字自动压缩,例如,假设你有一个名叫myscript.js的脚步文件想要压缩,只要你将其重命名为myscript.yui.js,它就会调用YUI压缩程序自动压缩,压缩后的文件在解决方案

一起谈.NET技术,ASP.NET MVC开发人员必备的五大工具

1. Chirpy Zippy 下载地址:http://chirpy.codeplex.com/ 过去,在将JavaScript脚本和CSS文件部署到Web服务器之前,我习惯使用压缩工具进行压缩再部署,安装Chirpy后,你的脚本和CSS文件将会基于其名字自动压缩,例如,假设你有一个名叫myscript.js的脚步文件想要压缩,只要你将其重命名为myscript.yui.js,它就会调用YUI压缩程序自动压缩,压缩后的文件在解决方案资源管理器中显示为一个子项目,你可以继续查看和调试未经压缩的脚本

大调查!.net 程序员们,现在你们用webform 还是mvc 的多呢??来者有分送

问题描述 我是一个老程序员了,因为老或许是工作时间长点,有五六年七八年开发时间了吧.我现在大部分还是用webform老时代的技术了,听说mvc有很多优点,抛弃服务器控件等等...问下你们现在用的哪种模式??.webformormvc?? 解决方案 解决方案二:我公司的项目是用MVC,所以现在主要接触的还是MVC,我还是一个菜鸟,,,解决方案三:MVC,winform公司都有做.解决方案四:现在用mvc,之前九年都是webform,但转过来大概也就一两天不适期,因为之前webform的时候最后四五

asp.net 中的MVC好在哪呢?

问题描述 除了可以耍酷的把真实访问的aspx页面藏起来以及节约viewstate的数据传输量之外,多了个严重的缺点:在开发cshtml时没有服务器端控件可以用了,也没有可视化界面,得手写html标签了.这个缺点使开发成本急剧增加.另外,在asp.netwebform中也是可以通过建立业务模型实现代码重用的.谁来告诉我,asp.net的MVC到底好在哪?谢谢! 解决方案 解决方案二:MVC好久没用,几乎都快忘了.无论是设计模式还是框架也好,都是根据项目本身的需要去选择的,再好的设计模式或者框架都不

ASP.NET WebForm页面内容输出方式

这次我们谈的话题是"Web Form页面上输出内容的方式".这其实是一个非常旧的话题了,因为本文的内容甚至可以运用于ASP.NET 1.1之上. 不过这个话题的适用范围很广,因为即使是目前最新的ASP.NET MVC框架,它的默认视图引擎依旧是基于ASP.NET WebForm的(如Page,Control,MasterPage).甚至说,由于ASP.NET MVC框架的特性,我们会遇到更多在页面上"直接输出"内容的情况.因此,这个话题在ASP.NET MVC应用中