仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 606|回复: 8
打印 上一主题 下一主题

[其他Linux] 给大家带来MongoDB进修条记(三) 在MVC形式下经由过程Jqgrid表格操纵MongoDB数据

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:18:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
学习linux,就意味着更快的开发效率,等更多关于软件本身或者说操作系统本身的理解。
看到下图,是经由过程Jqgrid完成表格数据的基础增删查改的操纵。表格数据增编削是一样平常企业使用体系开辟的罕见功效,不外分歧的是这个表格数据来历长短干系型的数据库MongoDB。nosql固然观点新奇,可是MongoDB基础使用完成起来仍是对照轻松的,乃至代码比基础的ADO.net会见干系数据源还要简便。因为其自己的“非干系”的数据存储体例,使得工具干系映照这个环节关于MongoDB来说显得毫偶然义,因而我们也不会对MongoDB引进所谓的“ORM”框架。

上面我们将慢慢解说怎样在MVC形式下将MongoDB数据读取,并展现在前台Jqgrid表格上。这个“浅易体系”的基础计划头脑是如许的:我们在视图层展现表格,Jqgrid相干Js逻辑全体放在一个Js文件中,把持层完成了“增删查改”四个营业,MongoDB的基础数据会见放在了模子层完成。上面我们一步步完成。
1、完成视图层Jqgrid表格逻辑
  起首,我们新建一个MVC空缺项目,增加好jQuery、jQueryUI、Jqgrid的前端框架代码:
  然后在Views的Home文件夹下新建视图“Index.aspx”,在视图的body标签中增加以下HTML代码:
.代码以下:

<div>
<tableid="table1">
</table>
<divid="div1">
</div>
</div>


接着新建ScriptsHome文件夹,在该目次新建“Index.js”文件,并再视图中援用,代码以下:
.代码以下:

jQuery(document).ready(function(){

//jqGrid初始化
jQuery("#table1").jqGrid({
url:/Home/UserList,
datatype:json,
mtype:POST,
colNames:[登录名,姓名,岁数,手机号,邮箱地点,操纵],
colModel:[
{name:UserId,index:UserId,width:180,editable:true},
{name:UserName,index:UserName,width:200,editable:true},
{name:Age,index:Age,width:150,editable:true},
{name:Tel,index:Tel,width:150,editable:true},
{name:Email,index:Email,width:150,editable:true},
{name:Edit,index:Edit,width:150,editable:false,align:center}
],
pager:#div1,
postData:{},
rowNum:5,
rowList:[5,10,20],
sortable:true,
caption:用户信息办理,
hidegrid:false,
rownumbers:true,
viewrecords:true
}).navGrid(#div1,{edit:false,add:false,del:false})
.navButtonAdd(#div1,{
caption:"编纂",
buttonicon:"ui-icon-add",
onClickButton:function(){
varid=$("#table1").getGridParam("selrow");
if(id==null){
alert("请选择行!");
return;
}
if(id=="newId")return;
$("#table1").editRow(id);
$("#table1").find("#"+id+"_UserId").attr("readonly","readOnly");
$("#table1").setCell(id,"Edit","<inputid=Button1type=buttonvalue=提交/><inputid=Button2type=buttonvalue=作废/>");
}
}).navButtonAdd(#div1,{
caption:"删除",
buttonicon:"ui-icon-del",
onClickButton:function(){
varid=$("#table1").getGridParam("selrow");
if(id==null){
alert("请选择行!");
return;
}
Delete(id);
}
}).navButtonAdd(#div1,{
caption:"新增",
buttonicon:"ui-icon-add",
onClickButton:function(){
$("#table1").addRowData("newId",-1);
$("#table1").editRow("newId");
$("#table1").setCell("newId","Edit","<inputid=Button1type=buttonvalue=提交/><inputid=Button2type=buttonvalue=作废/>");
}
});
});

//作废编纂形态
functionCancel(id){
if(id=="newId")$("#table1").delRowData("newId");
else$("#table1").restoreRow(id);
}

//向背景ajax哀求新增数据
functionAdd(){
varUserId=$("#table1").find("#newId"+"_UserId").val();
varUserName=$("#table1").find("#newId"+"_UserName").val();
varAge=$("#table1").find("#newId"+"_Age").val();
varTel=$("#table1").find("#newId"+"_Tel").val();
varEmail=$("#table1").find("#newId"+"_Email").val();

$.ajax({
type:"POST",
url:"/Home/Add",
data:"UserId="+UserId+"&UserName="+UserName+"&Age="+Age+"&Tel="+Tel+"&Email="+Email,
success:function(msg){
alert("新增数据:"+msg);
$("#table1").trigger("reloadGrid");
}
});
}

//向背景ajax哀求更新数据
functionUpdate(id){
varUserId=$("#table1").find("#"+id+"_UserId").val();
varUserName=$("#table1").find("#"+id+"_UserName").val();
varAge=$("#table1").find("#"+id+"_Age").val();
varTel=$("#table1").find("#"+id+"_Tel").val();
varEmail=$("#table1").find("#"+id+"_Email").val();

$.ajax({
type:"POST",
url:"/Home/Update",
data:"UserId="+UserId+"&UserName="+UserName+"&Age="+Age+"&Tel="+Tel+"&Email="+Email,
success:function(msg){
alert("修正数据:"+msg);
$("#table1").trigger("reloadGrid");
}
});
}

//向背景ajax哀求删除数据
functionDelete(id){
varUserId=$("#table1").getCell(id,"UserId");
$.ajax({
type:"POST",
url:"/Home/Delete",
data:"UserId="+UserId,
success:function(msg){
alert("删除数据:"+msg);
$("#table1").trigger("reloadGrid");
}
});
}


2、完成把持层营业
  在Controllers目次下新建把持器“HomeController.cs”,Index.js中发生了四个ajax哀求,对应把持层也有四个营业办法。HomeController代码以下:
.代码以下:

publicclassHomeController:Controller
{
UserModeluserModel=newUserModel();
publicActionResultIndex()
{
returnView();
}

///<summary>
///猎取全体用户列表,经由过程json将数据供应给jqGrid
///</summary>
publicJsonResultUserList(stringsord,stringsidx,stringrows,stringpage)
{
varlist=userModel.FindAll();
inti=0;
varquery=fromuinlist
selectnew
{
id=i++,
cell=newstring[]{
u["UserId"].ToString(),
u["UserName"].ToString(),
u["Age"].ToString(),
u["Tel"].ToString(),
u["Email"].ToString(),
"-"
}
};

vardata=new
{
total=query.Count()/Convert.ToInt32(rows)+1,
page=Convert.ToInt32(page),
records=query.Count(),
rows=query.Skip(Convert.ToInt32(rows)*(Convert.ToInt32(page)-1)).Take(Convert.ToInt32(rows))
};

returnJson(data,JsonRequestBehavior.AllowGet);
}

///<summary>
///呼应Js的“Add”ajax哀求,实行增加用户操纵
///</summary>
publicContentResultAdd(stringUserId,stringUserName,intAge,stringTel,stringEmail)
{
Documentdoc=newDocument();
doc["UserId"]=UserId;
doc["UserName"]=UserName;
doc["Age"]=Age;
doc["Tel"]=Tel;
doc["Email"]=Email;

try
{
userModel.Add(doc);
returnContent("增加乐成");
}
catch
{
returnContent("增加失利");
}
}

///<summary>
///呼应Js的“Delete”ajax哀求,实行删除用户操纵
///</summary>
publicContentResultDelete(stringUserId)
{
try
{
userModel.Delete(UserId);
returnContent("删除乐成");
}
catch
{
returnContent("删除失利");
}
}

///<summary>
///呼应Js的“Update”ajax哀求,实行更新用户操纵
///</summary>
publicContentResultUpdate(stringUserId,stringUserName,intAge,stringTel,stringEmail)
{
Documentdoc=newDocument();
doc["UserId"]=UserId;
doc["UserName"]=UserName;
doc["Age"]=Age;
doc["Tel"]=Tel;
doc["Email"]=Email;
try
{
userModel.Update(doc);
returnContent("修正乐成");
}
catch
{
returnContent("修正失利");
}
}
}


3、完成模子层数据会见
  最初,我们在Models新建一个Home文件夹,增加模子“UserModel.cs”,完成MongoDB数据库会见代码以下:
.代码以下:

publicclassUserModel
{
//链接字符串(此处三个字段值依据必要可为读设置文件)
publicstringconnectionString="mongodb://localhost";
//数据库名
publicstringdatabaseName="myDatabase";
//汇合名
publicstringcollectionName="userCollection";

privateMongomongo;
privateMongoDatabasemongoDatabase;
privateMongoCollection<Document>mongoCollection;

publicUserModel()
{
mongo=newMongo(connectionString);
mongoDatabase=mongo.GetDatabase(databaseName)asMongoDatabase;
mongoCollection=mongoDatabase.GetCollection<Document>(collectionName)asMongoCollection<Document>;
mongo.Connect();
}
~UserModel()
{
mongo.Disconnect();
}

///<summary>
///增添一条用户纪录
///</summary>
///<paramname="doc"></param>
publicvoidAdd(Documentdoc)
{
mongoCollection.Insert(doc);
}

///<summary>
///删除一条用户纪录
///</summary>
publicvoidDelete(stringUserId)
{
mongoCollection.Remove(newDocument{{"UserId",UserId}});
}

///<summary>
///更新一条用户纪录
///</summary>
///<paramname="doc"></param>
publicvoidUpdate(Documentdoc)
{
mongoCollection.FindAndModify(doc,newDocument{{"UserId",doc["UserId"].ToString()}});
}

///<summary>
///查找一切用户纪录
///</summary>
///<returns></returns>
publicIEnumerable<Document>FindAll()
{
returnmongoCollection.FindAll().Documents;
}
}


4、小结
  代码下载:MongoDB_003.rar
  自此为止一个复杂MongoDB表格数据操纵的功效就完成终了了,信任读者在看完这篇文章后,差未几都能够轻松完成MongoDB项目标开辟使用了。伶俐的你必定会比本文做的功效更完美,更好。下篇企图解说linq的体例会见数据汇合。
李盼(Lipan)
出处:[Lipan](http://www.ckuyun.com/lipan/)

功能实在太强了,在配合exec参数或者通过管道重定向到xargs命令和grep命令,可以完成非常复杂的操作,如果同样的操作用图形界面的工具来完成,恐怕要多花十几陪的时间。
若相依 该用户已被删除
沙发
发表于 2015-1-18 12:15:04 | 只看该作者
要增加自己Linux的技能,只有通过实践来实现了。所以,赶快找一部计算机,赶快安装一个Linux发行版本,然后进入精彩的Linux世界,相信对于你自己的Linux能力必然大有斩获。
兰色精灵 该用户已被删除
板凳
 楼主| 发表于 2015-1-22 06:43:49 | 只看该作者
熟读写基础知识,学得会不如学得牢。
精灵巫婆 该用户已被删除
地板
发表于 2015-1-30 23:33:02 | 只看该作者
主流Linux发行版都自带非常详细的文档(包括手册页和FAQ),从系统安装到系统安全,针对不同层次的人的详尽文档,仔细阅读文档后40%问题都可在此解决。
再现理想 该用户已被删除
5#
发表于 2015-2-6 17:08:59 | 只看该作者
其次,Linux简单易学,因为我们初学者只是学的基础部分,Linux的结构体系非常清晰,再加上老师循序渐进的教学以及耐心的讲解,使我们理解起来很快,短期内就基本掌握了操作和运行模式。
因胸联盟 该用户已被删除
6#
发表于 2015-2-17 13:55:40 | 只看该作者
应对Linux的发展历史和特点有所了解,Linux是抢占式多任务多用户操作系统,Linux最大的优点在于其作为服务器的强大功能,同时支持多种应用程序及开发工具。
乐观 该用户已被删除
7#
发表于 2015-3-5 20:12:13 | 只看该作者
写学习日记,这是学习历程的见证,同时我坚持认为是增强学习信念的法宝。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-3-12 14:35:06 | 只看该作者
如果你有庞大而复杂的测试条件,尽量把它剪裁得越小越好。可能你会遇到这种情况,对于一个问题会出现不同内容回答,这时你需要通过实践来验证。
9#
发表于 2015-3-19 23:09:57 | 只看该作者
这种补充有助于他人在邮件列表/新闻组/论坛中搜索对你有过帮助的完整解决方案,这可能对他们也很有用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-14 14:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表