Coolite Cool Study 3 MVC + Coolite 的实现代码



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

项目文件分布:

关于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; }
}
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

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;
}

}
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

页面的关键代码:

   <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" /> 
详细页面代码跟第一章差不多,这里不列出来。 

(0)

相关推荐

  • Coolite Cool Study 3 MVC + Coolite 的实现代码

    因为默认的 MVC 的样式文件里对于的 table 和 其他相关样式(h1-h6) 与Coolite有冲突,会导致GridPanel走样,大家记得先把那个table 和  h1-h6的样式清除掉才看到GridPanel的帅脸面 - 项目文件分布: 关于Coolite在MVC中的配置文件跟一般webform是一样的. 但在MVC的Global.asax中,需要在 RegisterRoutes 方法里加上这一句: routes.IgnoreRoute("{exclude}/{coolite}/coo

  • 一个简单的php MVC留言本实例代码(必看篇)

    摘要 标题上我把这个留言板叫最简单的,其实应该叫最简陋的,因为把全部注意力集中在MVC模式设计和实现上,所以UI方面几乎没有一点修饰. 这个小程序一共包含6个文件,其中index.php是程序入口.post.htm是留言表单.在lib文件夹里Model.View .Controller三个文件分别实现MVC,DataAccess是一个简单的数据库访问类.其实这个程序是国外的一个人写的. PHP代码: /** * 一个用来访问MySQL的类 * 仅仅实现演示所需的基本功能,没有容错等 * 代码未作

  • Coolite Cool Study 1 在Grid中用ComboBox 来编辑数据

    官方有一个关于Grid CURD 的例子:http://examples.coolite.com/Examples/GridPanel/WebService_Connections/HandlerUsing/   我在其基础上稍微修改一下, 用ComboBox作为Grid的Editor: 先show一下效果给大家坚持看下去的动力: 关键代码: 复制代码 代码如下: <ext:Column ColumnID="ContactName" DataIndex="Contact

  • Coolite Cool Study 2 同时更新多个Tab

       当时用Coolite做测试遇到两个问题: 1. 传递给Tab的Url参数会莫名其妙的被添加上其他字符(到Coolite论坛上问了一下估计是bug).正常情况下,google搜索url是这个样子:http://www.google.com/search?q=Hello   但因为Coolite在Tab的Url后面添加了某些字符,结果变成这样:http://www.google.com/search?q=Hellosfkjsdkfjskdf,  解决办法是把搜索Url设成这样形式:http:/

  • Angular.js前台传list数组由后台spring MVC接收数组示例代码

    前言 本文主要给大家介绍了关于Angular.js前台传list数组由后台spring MVC接收数组的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍吧. 在开发中有时候需要在前台自定义对象,然后把对象封装在list中,在传送到后台,这样的思想也比较合理,直接来看示例代码: 1. 前台代码 $scope.saveScore = function () { $scope.userScoreList = new Array();//自定义数组 angular.forEach (

  • ASP.NET MVC验证码功能实现代码

    前台 复制代码 代码如下: <img id="vcodeimg" src="/Home/VCode" width="70"                                    height="25" />                                 <span                                    style="cursor: p

  • ASP.NET MVC 4使用PagedList.Mvc分页的实现代码

    ASP.NET MVC中进行分页的方式有多种,在NuGet上有提供使用PagedList.PagedList.Mvc进行分页. 在安装引用PagedList.Mvc的同时会安装引用PagedList. 复制代码 代码如下: @Html.PagedListPager((PagedList.IPagedList<SampleInfo>)ViewBag.Models, page => Url.Action("Index", new { page, keyword = Req

  • Asp.net mvc 数据调用示例代码

    (1)首先我们创建一个mvc项目,当然最好是mvc1.0版本以上. (2)我这个小Demo,没有重新配置路由解析,使用的是mvc项目默认的路由解析地址.当然如果谁感兴趣也可以自己添加一个默认路由! (3)我这里有一个名字叫Database1.mdf的数据库,里面包含一个News表. (4)然后我们右击Models文件夹,Models>添加新项,选择: 名字可以自己随便起.我这里叫做Test.edmx,然后点击添加. 下一步: 这里我们可以点击新建连接,来选择自己想要的数据库,最下面的是WebCo

  • Spring MVC 拦截器实现代码

    拦截器的实现 1.编写拦截器类实现HandlerInterceptor接口: 2.将拦截器注册进springmvc框架中: 3.配置拦截器的拦截规则: 其他实现方法 WebRequestInterceptor接口: 与上一个的区别是参数区别和prehandle的方法没有返回值.没有上一个功能全,因此常用第一个. 拦截器的使用场景 处理所有请求共性问题: 1.乱码问题:用request,response参数去设置编码: 2.解决权限验证问题(是否登陆,取session对象查看): 拦截器与过滤器的

  • Spring MVC的国际化实现代码

    Spring MVC的国际化是建立在Java国际化的基础上的,其一样是通过提供不同国家的语言环境的消息资源.通过ResourceBundle加载Locale对应的资源文件.再取得该资源文件中指定Key对应的消息. 步骤: 1.给系统加载国际化资源 2.输出国际化.Spring MVC输出国际化消息有两种方式. 在页面上输出国际化消息.需要使用Spring MVC的标签库. 在Controller的处理方法中输出国际化消息.需要使用org.springframework.web.servlet.s

随机推荐