[ 登录 ][ 注册 ] 天极传媒: 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
您现在的位置: IT专家网 > Web服务子站 > 技巧

.Net环境下基于Ajax的MVC方案

作者: ,  出处:天极blog, 责任编辑: 叶江, 
2005-10-21 15:14
  在.Net环境下,应用Ajax并不是非常方便。 本文旨在充分利于现有的asp.net本身的特点和ajax的特性,提出一个用于在asp.net环境下进行基于ajax的web开发的MVC方案。

2)在server端,Ajax.aspx文件封装了对由客户端ajaxTemplate指定的UserControl的调用,其余的具体逻辑功能则在特定的UserControl及其ascx.cs内实现;

3)这样,具体执行一次callback时,编程人员只需在页面引用AjaxHelper.js,并在指定的位置通过javascript:Updater(ajaxTemplate, output, params, onComplete)进行调用,如果需要对某一form进行提交,则可调用javascript:SerializeForm(form)序列化该form并传给params,当然也可以手动构造params,并指定将返回数据通过设置output应用的页面或通过onComplete自定义处理。

4)由于充分使用UserControl,意味着,可以充分利用asp.net原有的web服务器端控件和数据绑定机制,这样其实,已经很大程度上简化了返回数据的构造,在ascx.cs中,通过Request.Form[ParamName]就能访问到client端传入的params,再访问逻辑代码获取源数据。

      5、范例

      包含在源码中的范例实现了一个简单的无刷新获取博客园首页内容到一个textarea的功能,详见源码!

部分范例源码:

Default.aspx
  <%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="CN.Teddy.AjaxHelper.WebForm1" %>
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
 <HTML>
     <HEAD>
         <title>WebForm1</title>
         <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
         <meta name="CODE_LANGUAGE" Content="C#">
         <meta name="vs_defaultClientScript" content="JavaScript">
         <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
         <script type="text/javascript" language="javascript" src="js/AjaxHelper.js"></script>
     </HEAD>
     <body>
         <form id="Form1" method="post" runat="server">
             <div id="view2">loading </div>
              <script type="text/javascript">
                 Updater('AjaxTemplate/GetPageSrc', 'view2', 'url=http://www.cnblogs.com');
             </script>
 
         </form>
     </body>
 </HTML>

AjaxHelper.js摘要:
 var AjaxHelperUrl = new String("Ajax.aspx");
 
 var Updater = function(ajaxTemplate, output, params, onComplete)
 
 {
 
     if (typeof output == 'string')
 
     {
 
         output = $(output);
 
     }


     new Ajax.Request( 'Ajax.aspx', { onComplete: function(transport) { if (output != null) { output.innerHTML = FormatContent(transport.responseText); } if (onComplete != null) { onComplete(FormatContent(transport.responseText)) } }, parameters: params + '&AjaxTemplate=' + ajaxTemplate });
 
 }
 
 var SerializeForm = function(form)
 
 {
 
     return Form.serialize(form);
 
 }
 
 var FormatContent = function(str)
 
 {
 
     var content = new String(str);
 
     var prefix = new String("<!--AjaxContent-->");
 
     content = content.substring(content.indexOf(prefix, 0) + prefix.length, content.length - 9);
 
     return content;
 
 }

UserControl GetPageSrc.ascx.cs摘要:
         private void Page_Load(object sender, System.EventArgs e)
          {
             lbUrl.Text = Request.Form["url"];
 
             System.Net.WebClient client = new System.Net.WebClient ();
             client.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)");
             try
              {
                 txtPageSource.Text = new System.IO.StreamReader(client.OpenRead(lbUrl.Text), System.Text.Encoding.UTF8).ReadToEnd();
             }
             catch(Exception ex)
              {
                 throw ex;
             }
         }

共2页。 9 1 2
  • 本文关键词:

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。

邮件订阅