UpdatePanel for ASP.NET MVC的尝试

其实这是一篇迟发布近2个月的文章。事实上在ASP.NET MVC Preview 2发布之 前我就已经将这篇文章的所有内容准备完毕了。当时想,就等Preview 2发布吧, 而真一旦Preview 2发布之后却又懒得进行移植——移植了之后却又懒 得写文章。这一拖就是近2个月,毫无长进。可能工作等其他事情的确多了些,但 是扪心自问,也并没有忙到不可开交。时间往往都是在点点滴滴间浪费的。唉, 可能是自视太高,越来越不愿意写一些普普通通的介绍性文章,导致可写的东西 大大减少。不过话说回来,其实打算写的,甚至多次说过要写得东西也并不少, 为什么就就是没有动笔呢?其实还是一个“懒”字——当 年的勤奋劲儿到哪里去了呢?

言归正传。先解释一下标题,什么是“UpdatePanel for ASP.NET MVC”呢?ASP.NET AJAX中的UpdatePanel相信大家都有所了解。可惜的是, ASP.NET MVC框架的诞生“毁灭”了大量基于PostBack的控件,首当其 冲地可能就是UpdatePanel了。如果没有PostBack,UpdatePanel就失去了全部作 用,甚至不如一些绑定控件,至少它们还能够用于展示。为UpdatePanel长吁短叹 之后,我们不禁又开始怀念UpdatePanel的优势:“透明”。在 UpdatePanel的帮助下,实现AJAX操作对于开发人员几乎完全透明。我们要做的仅 仅是将需要AJAX更新的内容用UpdatePanel包装起来,一切都是那么优雅。

我们能否在ASP.NET MVC中拯救UpdatePanel呢?也许是可以的吧,但这更 像是一个“不可能完成的任务”。我不是传说中的阿汤哥,因此重新 为ASP.NET MVC量身定制一个AJAX解决方案似乎更为可行。虽然我们不会苛求一个 新生事物从诞生开始就趋向完美,但即使只是一个原型,它也必须严格遵守的一 些原则:

不得破坏MVC中的协议(协作,职责等等)

对开发人员尽 可能地透明

Nikhil Kothari曾经提出了他在ASP.NET MVC框架下的AJAX解 决方案。如果您还不了解他的做法,那么我先在这里进行一点概括。Nikhil扩展 了Controller使之支持一种Ajax操作,于是我们在代码中就可以写如下代码:

public class TaskListController : AjaxController {
   ...
  public void CompleteTask(int taskID) {
    if (String.IsNullOrEmpty(Request.Form["deleteTask"]) == false) {
      InvokeAction("DeleteTask");
       return;
    }
    Task task = _taskDB.GetTask (taskID);
    if (task != null) {
       _taskDB.CompleteTask(task);
    }
    if (IsAjaxRequest) {
      if (task != null) {
         RenderPartial("TaskView", task);
      }
    }
    else {
      RedirectToAction ("List");
    }
  }
  ...
}

与AjaxController类似,Nikhil也为ViewPage和ViewControl提供 了一些扩展方法,因此目前在View(List.aspx)中我们就能看到如下的代码:

<div id="taskList">
  <% foreach (Task task in Tasks) { %>
    <div>
      <% this.RenderPartial("TaskView", task); %>
     </div>
  <% } %>
</div>

时间: 2024-08-29 02:12:50

UpdatePanel for ASP.NET MVC的尝试的相关文章

[转自JeffreyZhao]不妨来做个尝试:UpdatePanel for ASP.NET MVC

原文地址:http://www.cnblogs.com/JeffreyZhao/archive/2008/04/27/try-to-build-an-updatepanel-for-asp-dot-net-mvc.html 先来发一通牢骚. 其实这是一篇迟发布近2个月的文章.事实上在ASP.NET MVC Preview 2发布之前我就已经将这篇文章的所有内容准备完毕了.当时想,就等Preview 2发布吧,而真一旦Preview 2发布之后却又懒得进行移植--移植了之后却又懒得写文章.这一拖就

asp.net MVC项目中 没有easyui插件的智能提示

问题描述 asp.net MVC项目中 没有easyui插件的智能提示 5C vs2015 中的mvc4项目,已经分别把jQuery.min.js jquery.easyui.min.jseasyui-lang-zh_CN.js依次拖入,写js代码的时候 智能提示只有jquery中的属性和方法 没有easyui的(例如$.messager就出不来智能提示),但是可以正常执行出来插件效果,尝试编辑cshtml.html格式的文件都不提示,尝试把 jquery.easyui.min.js的文件名改为

探讨ASP.NET MVC框架内置AJAX支持编程技术

传统型ASP.NET Web Forms是基于同时包含了表现层和后台代码的Web页面, 所以,紧随其后出现的ASP.NET AJAX,特别是这个框架的服务器端控件并没有像 它们本应该的那样光芒四射.于是,很多跟随AJAX时髦的ASP.NET开发者只是向 ASP.NET页面中随意地放置一些UpdatePanel控件以便使其程序实现基本的AJAX支 持.实际上,这只是防止了页面的"闪烁",而根本上页面还是进行 了完整的回发,并且要经历整个页面的生存周期.为了消除ASP.NET Web Fo

ASP.NET MVC如何显示UserControl控件(扩展篇)

昨晚Insus.NET有怀旧一下<念念不忘,ASP.NET MVC显示WebForm网页或UserControl控件>http://www.cnblogs.com/insus/p/3641610.html 那仅是小小尝试,还有很多不明的地方. 那一篇其中有Render用户控件ascx的.如今Insus.NET想重构它一下,让步其能在Action或是Razor语法中使用. 创建一个AscxUtility.cs,这们我们可以在应用程序中多个地方使用. 这样我们就可以重构一下昨晚那个public A

Asp.Net Mvc: Model Binding 机制分析

环境: Windows 2008, VS 2008 SP1, Asp.Net Mvc RC1 请求过程片段: 在请求的Action被调用之前,ControllerActionInvoker.InvokeAction()方法被调用,在这个方法里 面,有一个ReflectedActionDescriptor的实例会被构建,这个实例包含Action的描述信息. 接着,ControllerActionInvoker.GetParameterValues()方法被调用,通过传入的之前创建的 Reflect

为ASP.NET MVC RC分离Controllers-Views项目后添加“脚手架”功能(二)

上一篇<为ASP.NET MVC RC分离Controllers-Views项目后添加"脚手架"功能(一)> 中讲到如何 分离Controllers和Views项目,并且为Controllers项目添加MVC RC的"脚手架",可惜"脚手架"的功 能保留的过于完整,以至于自动创建和察看View页面都会在当前项目中进行,除非你心甘情愿每次创建完 成后手动将文件转移到Views(Web)项目,否则这个"脚手架"的意义几

浅谈ASP.NET MVC框架

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

Asp.Net Mvc Beta新特性之自动绑定(2)-深入探索篇

在上篇中介绍了自动绑定的基本用法,在本篇中,我们将深入了解自动绑定的工作原理. 自动绑定的确是让人感到兴奋的特性,然而,为了让它可以在我们的项目中更好的工作,我们有必要深入了解如何更进一步细调该特性以及它是如何工作的.而本文正式即将揭开这个谜底. 为了更好的了解该特性,我们有必要到codeplex去下载一份asp.net mvc的源代码并分析之,在本文写作的时候,codeplex上已经放上了beta版的源码,如果想进一步了解的朋友可以下载并对照本文分析. 在beta版中,新增了自动绑定这一特性,

[Angularjs]asp.net mvc+angularjs+web api单页应用

写在前面 最近的工作一直在弄一些h5的单页应用,然后嵌入到app的webview中.之前一直在用angularjs+html+ashx的一套东西.实在是玩腻了.然后就尝试通过asp.net mvc的方式构建单页应用.用到的技术angularjs+webapi+mvc.在网上找到了一些相关的文章,关于anguar的位置也没有一个比较好的一个标准.这里也是抛砖引玉,希望通过讨论,得到一个更好的结构. 项目结构 结构说明: _Layout.cshtml:该文件作为模板文件,这里将应用的js,及css文