大家知道EXT.NET可以和MVC一起使用,就没有CS页,全部靠JS或者控制域来操作。
另外一种是有CS页面,直接可以后台操作。下面我们就先来说一下直接后台操作的一些注意事项:
首先我们前面提到每个页面都必须添加一个
当我们需要调用后台一些方法的时候,这个名称空间就尤为重要。如下:
假如我们建了一个
需要转换一下,我想一般这个用户类型我们都是存的ID吧。根据ID在到配置表里把对应的类型名称找出来。
JS方法如下(注意看红色地方):
var getValue = function (value) {
var result = extHT.getUserType(value);
debugger;
//try { alert("b:" + result.xhr.responseText + " a:" + result.responseXml); } catch (e) { }//这个是调试代码,看看返回是不是对的。
return result.xhr.responseText;
//这一块是在类型比较少,且已知的情况下可以简单的处理,如果是很多且未知 我们还是需要到后台进行数据库查询来处理
//switch (value) {
// case "220":
// return "XXXXXX"
// break;
//}
}
CS后台代码(注意红色的地方):
[DirectMethod]
public string getUserType(string value)
{
string type = "";
if (value == "220") { type = "XXXXX"; }
//等等一系列的操作
return type;
}
由上我们可以看出EXT.NET需要调用到后台代码的时候我们必须根据ResourceManager的名称空间来。所以大家在取名字的时候还是上点心。
或许有的人会觉得每个页面都去定义个好麻烦,那有没有在什么地方配置后全部都用那个名称呢?不用每个页面去定义。当然是有的了,在web.config中添加节点
当然我们还可以在后台代码更改名称空间:[DirectMethod(Namespace = "MyApp.DirectMethods")]。
我们还可以在调用后台代码加一些回调函数:
function fnUpdate() {
MyApp.DirectMethods.getUserType(5, {
success: onSuccess,
failure: onFailure,
eventMask: { showMask: true }
});
}
function onSuccess() {
alert("成功");
}
function onFailure() {
alert("失败");
}
在这段代码中,我们在调用DirectMethod方法的时候添加了一些配置,包括执行成功和失败的回调方法,以及来显示一个遮罩层。
一般情况下我们都是采用异步的方式来执行服务器端的方法,这样能够获得更好的用户体验,当然,如果你有怪癖,希望能够通过同步的方式来执行服务器端方法,Ext.Net DirectMethods也是支持的。[DirectMethod(Namespace = "MyApp.DirectMethods", Async = false)]即可。
由上可以看出是很简单的一个设置,在DirectMethod构造函数中配置一下就可以了。
郑重的提醒,尽量少用同步的请求,这样会造成浏览器假死的现象,如同2014年春运时候抢火车票的情况。
静态和非静态方法
静态方法很简单:
[DirectMethod(Namespace = "MyApp.DirectMethods", Async = false)]
public void AddToServerTime(int hours)
{
string text = this.btnUpdate.Text;
var date = DateTime.Now.Add(new TimeSpan(hours, 0, 0));
this.myLabel.Text = text + date.ToString();
}
调用直接如上fnUpdate方法调用即可。
在来说说非静态方法,在执行非静态方法的时候,Ext.Net会提交更多的数据,使我们可以访问页面中的控件这在处理页面相关内容时候非常有用,但是当我们只是想去执行一个处理过程,而与页面无关的时候,我们就可以通过执行静态方法来提升性能。
在静态方法中,我们不能访问页面的Form数据,不能直接访问Request、Response等数据(可以通过HttpContext.Current来访问),好处是在请求的时候,Ext.Net不会将页面数据提交给服务器,大大减少了数据传输和服务器执行的时间。
[DirectMethod(Namespace = "MyApp.DirectMethods")]
public static string AddToServerTime(int hours)
{
var date = DateTime.Now.Add(new TimeSpan(hours, 0, 0));
return date.ToString();
}
这是我们刚才的方法,现在把它改成了静态方法。JS的调用基本没有改变,只不过我们需要在JS中来更新控件的显示了。
function fnUpdate() {
MyApp.DirectMethods.AddToServerTime(5, {
success: onSuccess,
failure: onFailure,
eventMask: { showMask: true }
});
}
function onSuccess(result) {
App.myLabel.setText(result);
}
我们需要对onSuccess回调方法进行修改,在它接收到执行结果之后更新界面显示。
访问WebService等类似方法
DirectMethods不能直接访问WebService,但可以通过Ext.net.DirectMethod.request来请求WebService,实现类似于页面后台方法的效果。
var showRelativeServerTime = function () {
Ext.net.DirectMethod.request({
url: "EchoService.asmx/Echo",
cleanRequest: true,
params: {
something: "Hello world!"
},
success: function (result) {
alert(Ext.DomQuery.selectValue("string", result, ""));
}
});
}附加说明:这种方法受用于一切WebService、一般处理程序、MVC等通过url访问的东东,非常好用。