Coolite Cool Study 3 MVC + Coolite 的例子

Coolite笔记Coolite笔记 CooliteCoolite笔记Coolite笔记 立即下载

Coolite Cool Study 3 MVC + Coolite 的例子

啊,开始以为MVC+Coolite结合的例子没什么难度,但原来Coolite在MVC中需要特定设置一下某些属性才行,费了两个小时才算大功告成,具体请看下文。还是先把这个例子的效果贴上来再说。

MVC-Coolite

因为默认的 MVC 的样式文件里对于的 table 和 其他相关样式(h1~h6) 与Coolite有冲突,会导致GridPanel走样,大家记得先把那个table 和  h1~h6的样式清除掉才看到GridPanel的帅脸面 …

项目文件分布:

ProjectFiles

关于Coolite在MVC中的配置文件跟一般webform是一样的。 但在MVC的Global.asax中,需要在 RegisterRoutes 方法里加上这一句:

routes.IgnoreRoute("{exclude}/{coolite}/coolite.axd");

另外 ScriptManager 要注明 IDMode="Static“:

<ext:ScriptManager ID="ScriptManager1" runat="server"  IDMode="Static"/>

其中唯一与一般MVC不同的是,我们需要定义自己的ActionResult来返回Json结果给客户端。因为Coolite 的JsonReader 要求的格式大致都是这样:{data: [{…}], totalCount: …}

关于JsonReader的一般用法:

<ext:JsonReader ReaderID="CustomerID" Root="data" TotalProperty="totalCount"> 

所以, 要继承MVC ActionResult 的抽象方法 public override void ExecuteResult(ControllerContext context)  来返回给 JsonReader   合适口味的 JsonResult , 不然它就不认人了。

以下代码实现了对Json Response & Save Response 的简单封装。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Coolite.Ext.Web;

namespace CooliteMVC.Helper
{ 
    public class AjaxStoreResult : ActionResult
    {
        public AjaxStoreResult() { }

        public AjaxStoreResult(object data)
        {
            this.Data = data;
        }

        public AjaxStoreResult(object data, int totalCount)
            : this(data)
        {
            this.TotalCount = totalCount;
        }

        public AjaxStoreResult(StoreResponseFormat responseFormat)
        {
            this.ResponseFormat = responseFormat;
        }

        private object data;
        public object Data
        {
            get { return this.data; }
            set { this.data = value; }
        }

        private int totalCount;
        public int TotalCount
        {
            get { return this.totalCount; }
            set { this.totalCount = value; }
        }

        private StoreResponseFormat responseFormat = StoreResponseFormat.Load;
        public StoreResponseFormat ResponseFormat
        {
            get { return this.responseFormat; }
            set { this.responseFormat = value; }
        }

        private SaveStoreResponse saveResponse;
        public SaveStoreResponse SaveResponse
        {
            get
            {
                if (this.saveResponse == null)
                {
                    this.saveResponse = new SaveStoreResponse();
                }
                return this.saveResponse;
            }
        }

        public override void ExecuteResult(ControllerContext context)
        {
            switch (this.ResponseFormat)
            {
                case StoreResponseFormat.Load:

                    string json = Coolite.Ext.Web.JSON.Serialize(Data);
                    json = "{data:" + json + ", totalCount:" + 100 + "}";
                    context.HttpContext.Response.Write(json);
                     
                    break;
                case StoreResponseFormat.Save:
                    Response response = new Response(true);
                    response.Success = this.SaveResponse.Success;
                    response.Msg = this.SaveResponse.ErrorMessage;
                    StoreResponseData saveResponse = new StoreResponseData();
                    saveResponse.Confirmation = this.SaveResponse.ConfirmationList;
                    response.Data = saveResponse.ToString();

                    response.Write();
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }
 
    }

    public enum StoreResponseFormat
    {
        Load,
        Save
    }

    public class SaveStoreResponse
    {
        private bool success = true;
        private string errorMessage;

        public bool Success
        {
            get { return this.success; }
            set { this.success = value; }
        }

        public string ErrorMessage
        {
            get { return this.errorMessage; }
            set { this.errorMessage = value; }
        }

        public ConfirmationList ConfirmationList { get; set; }
    }
}

AjaxStoreResult 在 CustomerController 中的使用:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using CooliteMVC.Models;
using CooliteMVC.Helper;
using Coolite.Ext.Web;

namespace CooliteMVC.Controllers
{
    public class CustomerController : Controller
    {
        //
        // GET: /Customer/

        public ActionResult Index()
        {
            ViewData["Title"] = "Customer List";
            ViewData["Message"] = "Welcome to Coolite MVC! My name is Bruce.";
            return View();
        }

        public ActionResult List(int limit, int start, string dir, string sort)
        {
            Random rand = new Random();
            IList<Customer> list = new List<Customer>();
            for (int i = start; i < start + limit; i++)
                list.Add(new Customer
                {
                    CustomerID = "Customer" + i,
                    Address = "Address" + i,
                    City = "City" + rand.Next(1000),
                    CompanyName = "Com" + rand.Next(1000),
                    ContactName = "Contract" + rand.Next(1000),
                    ContactTitle = "Title" + rand.Next(1000),
                    Country = "Country" + rand.Next(1000),
                    Email = rand.Next(1000) + "@live.com",
                    Fax = rand.Next(1000).ToString() + rand.Next(1000),
                    Mobile = rand.Next(1000).ToString() + rand.Next(1000),
                    Notes = "Notes" + rand.Next(1000),
                    Phone = "Phone" + rand.Next(1000),
                    Region = "Region" + rand.Next(1000),
                    TranDate = DateTime.Now.AddDays(rand.Next(30))
                });
            return new AjaxStoreResult(list, 100);
        }

        public ActionResult Save()
        {
            AjaxStoreResult ajaxStoreResult = new AjaxStoreResult(StoreResponseFormat.Save);
            try
            {
                StoreDataHandler dataHandler = new StoreDataHandler(Request["data"]);
                ChangeRecords<Customer> data = dataHandler.ObjectData<Customer>();

                foreach (Customer customer in data.Deleted)
                {
                    //db.Customers.Attach(customer);
                    //db.Customers.DeleteOnSubmit(customer);
                }
                foreach (Customer customer in data.Updated)
                {
                    //db.Customers.Attach(customer);
                    //db.Refresh(RefreshMode.KeepCurrentValues, customer);
                }
                foreach (Customer customer in data.Created)
                {
                    //db.Customers.InsertOnSubmit(customer);
                }
            }
            catch (Exception e)
            {
                ajaxStoreResult.SaveResponse.Success = false;
                ajaxStoreResult.SaveResponse.ErrorMessage = e.Message;
            }
            return ajaxStoreResult;
        }
 
    }
}

页面的关键代码:

     <ext:Store ID="dsCustomers" runat="server" >
        <Proxy>
            <ext:HttpProxy Url="/Customer/List" Method ="GET" />
        </Proxy>
        <UpdateProxy>
             <ext:HttpWriteProxy  Url="/Customer/Save" />
        </UpdateProxy>
        <Reader>
            <ext:JsonReader ReaderID="CustomerID" Root="data" TotalProperty="totalCount">
                <Fields>
                    <ext:RecordField Name="CustomerID" SortDir="ASC" />
                    <ext:RecordField Name="CompanyName" />
                    <ext:RecordField Name="ContactName" />
                    <ext:RecordField Name="Email" />
                    <ext:RecordField Name="Phone" />
                    <ext:RecordField Name="Fax" />
                    <ext:RecordField Name="Region" />
                    <ext:RecordField Name="TranDate" Type="Date" />
                </Fields>
            </ext:JsonReader>
        </Reader>
        <BaseParams>
            <ext:Parameter Name="limit" Value="15" Mode="Raw" />
            <ext:Parameter Name="start" Value="0" Mode="Raw" />
            <ext:Parameter Name="dir" Value="ASC" />
            <ext:Parameter Name="sort" Value="CustomerID" />
        </BaseParams>
        <SortInfo Field="CustomerID" Direction="ASC" />
    </ext:Store>
我们可以看到其实就是Url的写法不同而已:
 <ext:HttpProxy Url="/Customer/List" Method ="GET" />
 <ext:HttpWriteProxy Url="/Customer/Save" />  
详细页面代码跟第一章差不多,这里不列出来。
coolite toolkit 0.8.2目前官方最高版本 coolite toolkit框架。学习coolite的好资料。 立即下载

相关推荐

coolite

ext 的.NET 控件,新手入门用

Coolite入门学习(一)

  工作了一年,忙忙碌碌的加班,什么都没留下,换了新公司,刚接触Coolite,完全自我摸索,分享下这些日子的一些学习经验。   由于现有公司使用的是coolite 0.8版本,本篇文章主要已0.8版本为基础。   0.8版本在线demo传送门:http://coolitetoolkit.51aspx.com/ (偶尔会有故障,建议在本机部署)   现在官网都更新了,0.8版本下载传送...

weixin_30716141的博客 160

coolite 代码教程

coolite 代码教程:1.入门 2.程序设计 3.基础用法 4 组件的使用

Coolite简介

Coolite Toolkit 简介 Coolite Toolkit 是一个支持ASP.NET AJAX的Web控件 Coolite Toolkit是基于跨浏览器的ExtJS 库开发而来的,并且简化了开发步骤,包含有丰富的Ajax运用 Coolite Toolkit和ExtJS 都是开源的 可能通过SVN直接获取Coolite 的代码 简单的说,就是将之前的纯Js的开源...

499

C#插件Coolite使用小教程

想要学习COOLITE,前提条件必须准备好对应的环境,就好比炒菜之前需要准备好调料和一些工具一样,假如你都不具备这些。何来的调试程序呢。好了,废话少说,开始说搭建环境吧。 第一,从COOLITE官方下载一个COOLITE的安装包。我用的是0.8的版本。你可以下载1.0的。跟0.8好像是有点区别的。工具什么都准备好了。我教大家怎么按照COOLITE组件吧。 第二,打开VS2008。打开工具栏,...

zhangziyangup 266

Coolite官方例子学习笔记三:按钮的花哨

按钮的花哨(前台简单属性设置) 一、给按钮加图片 <ext:Button runat="server" Text="Text" Icon="Add" /> 二、给按钮加样式<style type="text/css"> .custom-icon1 { background-image: url(arrow-down.gif) !i...

weixin_30367543的博客 125

Coolite Toolkit 介绍与配置

Coolite Toolkit 简介1、Coolite Toolkit 是一个支持ASP.NET AJAX的Web控件2、Coolite Toolkit是基于跨浏览器的ExtJS 库开发而来的,并且简化了开发步骤,包含有丰富的Ajax运用3Coolite Toolkit和ExtJS 都是开源的4、可能通过SVN直接获取Coolite 的代码简单的说,就是将之前的纯Js的开源Ajax库,使用asp...

weixin_30302609的博客 127

Coolite 基本用法(1)

最近在学习使用 Coolite.Net控件,网上资料又少得很,没办法只好【死盯着】让人头皮发麻的 E文 文档,一遍一遍的试着各个属性,让人....吐泡泡!随笔记下一些使用Coolite过程中的方法! 1.获取一个对象:#{控件的Id} 客户端,和服务端都可以,但服务端必须是 拼装在String里面的! 2.获取值的方式: <ext:Label 控件: #{...

weixin_30621919的博客 208

Coolite ext 组件源码(v0.8.1)

很好的extjs控件,适合asp.net开发,源码可以根据需要进行修改,项目使用时只需引用Coolite.Examples/bin目录下面的两个dll文件(Coolite.Ext.UX.dll和Coolite.Ext.Web.dll)即可。

ASP.NET使用Coolite.Ext.Web.dll,显示ext 未定义 的解决方法

<br />开发系统时用到Coolite.Ext.Web.dll,起初使用XP进行的开发,测试都没有问题。后来装了Windows7,再进行开发此时是,总显示ext 未定义。<br />解决方法:<br />web.config中关于Coolite.Ext.Web.dll配置,还需要补充system.webServer节中的相关配置。<br /> <br />FOR IIS6.0 and earlier  <br /> <br />Add the following to <httpModules> sect

大猴子的学习园地 4637

Coolite Toolkit 简介

简介 Coolite Toolkit 是一个支持ASP.NET AJAX的Web控件。Coolite Toolkit是基于跨浏览器的ExtJS 库开发而来的,并且简化了开发步骤,并且包含有丰富的Ajax运用。Coolite Toolkit和ExtJS 都是开源的。可能通过SVN直接获取Coolite 的代码。 系统要求 Visual Studio 2005 或者2008。Visu

JohnTang2014的专栏 622

CooliteToolkit之web.config配置

在web.config中的配置

chy2z的专栏 311

Coolite 交流

近来不知什么原因,发现国人有不少开始学习Coolite了,对于有些人可能不知道什么是Coolite,这里先简单介绍一下:Coolite Toolkit 简介 Coolite Toolkit 是一个支持ASP.NET AJAX的Web控件。 Coolite Toolkit是基于跨浏览器的ExtJS 库开发而来的,并且简化了开发步骤,并且包含有丰富的Ajax运用。 Coolite Toolkit和

编程的艺术世界 - Bruce Lee 7829

OpenCode 手动配置火山方舟 Agent Plan 教程

<think>我们只需要根据内容生成摘要。内容是关于火山方舟Agent Plan的配置指南。摘要需≤150字。概括要点:Agent Plan是什么,配置步骤,关键配置项,验证和切换模型。注意简洁。</think>Agent Plan 是火山方舟的智能体套餐,一个 API Key 即可调用豆包、DeepSeek、Kimi 等多家模型。配置 OpenCode 时,在配置文件中添加 volcengine-agent-plan 提供商,设置 API Key、baseURL 和模型列表,通过 opencode mod

qq_56236582的博客 202
上一篇: Coolite Cool Study 2 同时更新多个Tab
下一篇: log4net 的配置和使用方法
fengart
博客等级 码龄20年 91粉丝 45原创
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值