MVC中View与后台多次交互操作
1.MVC中View和Controller多次交互的操作。
前台有数据Table和操作按钮【取消】,选中某行数据,点击取消,提交到Controller中,验证选中的数据行是否满足取消的条件,如果不满足返回不满足原因显示到界面上;如果满足取消的验证条件(如数据状态等),在前台提示:是否确定要 取消该数据?。
前台继续操作,如果点击否,那么结束操作,如果点击是,那么继续操作,对该行数据进行取消操作。
过程:
代码:前台代码
数据Table代码:
Grid:
<div id="vertical" class="fullscreen">
<div id="grid"></div>
<div id="horizontal">
<div>
<div id="gridNotJoinOrder" class="bottom_left"></div>
</div>
<div class="middle">
<div class="content">
<button id="btnRightAll" class="glyphicon glyphicon-chevron-right"><span></span></button>
<button id="btnRight" class="glyphicon glyphicon-arrow-right"></button>
<button id="btnLeft" class="glyphicon glyphicon-arrow-left"></button>
<button id="btnLeftAll" class="glyphicon glyphicon-chevron-left"></button>
</div>
</div>
<div>
<div id="gridHasJoinOrder" class="bottom_right"></div>
</div>
</div>
</div>
@*查询*@
<script type="text/x-kendo-template" id="gridTransPlan_search">
<div class="toolbar">
<div>
<a class="k-button k-grid-myCancel" href="javascript:void(0);"><span class="k-icon k-i-hbars"></span>取消</a>
</div>
</div>
</script>
加载数据:
LoadingKendoGrid({
id: "#grid",
dataSource: dataSource_TransPlan,
toolbar: [
{ template: kendo.template($("#gridTransPlan_search").html()) }
],
columns: [
{ field: "rowNumber", title: "序号", width: 50, template: "<span class='row-number'></span>", attributes: { style: "white-space:nowrap;" }, filterable: false },
{
command: [
{
name: "myEdit",
text: "<span class='k-icon k-edit' style='margin-right:-2px' title='编辑' ></span>",
click: function (e) {
var tr = $(e.target).closest("tr");
var data = this.dataItem(tr);
UID = data.uid;
Edit(data);
}
},
{
name: "myDestroy",
text: "<span class='k-icon k-delete' style='margin-right:-2px' title='删除' ></span>",
click: function (e) {
var tr = $(e.target).closest("tr");
var data = this.dataItem(tr);
//校验通过后,再提示是否删除;
$.post("/H3CDMS/TransPlan/CheckDeleteTransPlan", { TransNo: data.TRANSNO }, function (result) {
if (result.code == CheckSuccess) {
ShowConfirm({
info: "确定删除该条数据吗?",
confirm: function () {
$.post("/H3CDMS/TransPlan/DeleteTransPlan", { TransNo: data.TRANSNO }, function (result) {
ShowInfo(result.msg);
if (result.code == DeleteSuccess) {
$("#grid").data("kendoGrid").dataSource.read();
}
});
}
});
} else {
ShowInfo(result.msg);
}
});
}
}
],
title: "操作",
width: 66
},
{
field: "TRANSNO", title: "计划货运单号", width: 120, attributes: { style: "white-space:nowrap;" }, filterable: true,
filterable: {
operators: {
string: {
eq: "包含"
}
},
ui: function (element) {
element[0].setAttribute("data-name", "TRANSNO");
element.kendoMaskedTextBox({});
},
messages: {
info: "计划货运单号"
}
}
},
{ field: "TRANSNOTE", title: "备注", attributes: { style: "white-space:nowrap;" }, filterable: false },
],
dataBound: function (e) {
var rows = this.items();
var page = this.pager.page() - 1;
var pagesize = this.pager.pageSize();
$(rows).each(function () {
var index = $(this).index() + 1 + page * pagesize;
var rowLabel = $(this).find(".row-number");
$(rowLabel).html(index);
});
//按钮权限控制
CheakUserAction();
},
height: "100%",
selectable: "row",
change: function (e) {
$("#gridHasJoinOrder").data("kendoGrid").dataSource.read();
}
});
按钮的点击事件:
$(".k-grid-myCancel").click(function (e) {
debugger;
var tr = $(".k-state-selected");
if (tr) {
var transno = $(tr).find('td').eq(2).text();
$.post("/H3CDMS/TransPlan/CheckPlan", { TRANSNO: transno }, function (rtnData) {
if (rtnData.code == checkSuccess) {
ShowConfirm({
info: "你确认要取消当前运输计划?",
confirm: function () {
$.post("/H3CDMS/TransPlan/UpdatePlanStatus", { TRANSNO: transno }, function (result) {
ShowInfo(result.msg);
if (result.code == CancelPlanSuccess) {
$("#grid").data("kendoGrid").dataSource.read();
}
});
}
});
}
else{
ShowInfo(rtnData.msg, false,0);
}
});
}
});
后台Controller
/// <summary>
/// 校验 取消运输计划
/// </summary>
/// <param name="TRANSNO"></param>
/// <param name="USER_ID"></param>
/// <returns></returns>
public JsonResult CheckPlan(string TRANSNO)
{
string Api_Address = Api_CheckTransportPlan + string.Format("?TRANSNO={0}&USER_ID={1}",TRANSNO,DataHelper.UserID.ToString());
string result = helper.HttpGetMethod(Api_Address);
ResultInfo resultinfo = JsonConvert.DeserializeObject(result, typeof(ResultInfo)) as ResultInfo;
return Json(resultinfo, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 更新实体
/// </summary>
public class UpdateTransNo
{
public string TRANSNO { set; get; }
}
/// <summary>
/// 取消运输计划
/// </summary>
/// <param name="TRANSNO"></param>
/// <returns></returns>
public JsonResult UpdatePlanStatus(string TRANSNO)
{
UpdateTransNo model = new UpdateTransNo()
{
TRANSNO = TRANSNO
};
string jsonString = JsonConvert.SerializeObject(model);
HttpClient client = new HttpClient();
HttpContent httpContent = new StringContent(jsonString);
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
HttpResponseMessage response = client.PostAsync(Api_UpdatePlanStatus,httpContent).Result;
string Result = response.Content.ReadAsStringAsync().Result;
ResultInfo obj = JsonConvert.DeserializeObject(Result, typeof(ResultInfo)) as ResultInfo;
if (obj != null)
{
LogHelper.WriteLog("运输计划", LogHelper.OperateType.Update, Api_UpdatePlanStatus, obj.msg, "货运单取消", TRANSNO);
resultInfo = obj;
}
else
{
resultInfo.ResultConnectError();
}
return Json(resultInfo, JsonRequestBehavior.AllowGet);
}
#endregion
API层
#region 取消确认
/// <summary>
/// 运输计划取消校验信息
/// </summary>
/// <param name="TRANSNO"></param>
/// <param name="User_id"></param>
/// <returns></returns>
[HttpGet]
public ResultInfo GetCheckPlan(string TRANSNO, string USER_ID)
{
MTL_SHIPPLAN_INFO mtl_Shipplan_Info = db.MTL_SHIPPLAN_INFO.Find(TRANSNO);
if (mtl_Shipplan_Info != null)
{
if (mtl_Shipplan_Info.REGISTER_MAN != USER_ID)
{
return new ResultInfo().CheckPlanFailed2();
}
if (mtl_Shipplan_Info.TRANSSTATUS != 20)
{
return new ResultInfo().CheckPlanFailed2();
}
int count = db.MTL_ORDERHEADERS.Where(x => x.TRANSNO.Equals(TRANSNO) && x.TRANS_STATUS == 30).Count();
if (count > 0)
{
return new ResultInfo().CheckPlanFailed3();
}
return new ResultInfo().CheckPlanSuccess();
}
else
{
return new ResultInfo().CheckPlanNotExist();
}
}
#endregion
#region 取消执行计划-更新状态
/// <summary>
/// 更新实体
/// </summary>
public class UpdateTransNo
{
public string TRANSNO { set; get; }
}
/// <summary>
///
/// </summary>
/// <param name="TRANSNO"></param>
/// <param name="USER_ID"></param>
/// <returns></returns>
[HttpPost]
public ResultInfo UpdatePlanStatus(UpdateTransNo model)
{
MTL_SHIPPLAN_INFO model1 = db.MTL_SHIPPLAN_INFO.Find(model.TRANSNO);
if (model1 != null)
{
model1.TRANSSTATUS = 10;
shipplan_business.UpdateModel(model1);
}
MTL_ORDERHEADERS model2 = db.MTL_ORDERHEADERS.Where(x => x.TRANSNO.Equals(model.TRANSNO)).FirstOrDefault();
if (model2 != null)
{
model2.TRANS_STATUS = 10;
orderheaders_business.UpdateModel(model2);
}
MTL_SHIPPLAN_DETAIL model3 = db.MTL_SHIPPLAN_DETAIL.Where(x => x.TRANSNO.Equals(model.TRANSNO)).FirstOrDefault();
if (model3 != null)
{
model3.STATUS = 10;
shipplan_detail_business.UpdateModel(model3);
}
return new ResultInfo().CancelPlanSuccess();
}
#endregion
}
底层的DAO,Business,Model就不展示了
前端页面:
MVC层Controller:
API层Controller:
API层Business,Dao,Model:
ResultInfo:
先进行黑色路线再进行红色路线
转载于:https://www.cnblogs.com/CoChe/p/6349265.html
MVC中View与后台多次交互操作相关推荐
- ASP.NET MVC中controller和view相互传值的方式
ASP.NET MVC中Controller向view传值的方式: ViewBag.ViewData.TempData 单个值的传递 Json 匿名类型 ExpandoObject Cookie Vi ...
- MVC中的View2(转)
MVC中View是专门用来向浏览器显示结果的,它只负责把传入到View的数据展现给用户: 一,自定义view引擎:实现IViewEngine接口 namespaceSystem.Web.Mvc { p ...
- 007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】
索引: 目录索引 Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Ch ...
- 通过源代码研究ASP.NET MVC中的Controller和View(二)
通过源代码研究ASP.NET MVC中的Controller和View(一) 在开始之前,先来温习下上一篇文章中的结论(推论): IView是所有HTML视图的抽象 ActionResult是Cont ...
- asp.net mvc中的后台验证
asp.net mvc的验证包含后台验证和前端验证.后台验证主要通过数据注解的形式实现对model中属性的验证,其验证过程发生在model绑定的过程中.前端验证是通过结合jquery.validate ...
- 通过源代码研究ASP.NET MVC中的Controller和View(三)
通过源代码研究ASP.NET MVC中的Controller和View(一) 通过源代码研究ASP.NET MVC中的Controller和View(二) 第三篇来了,上一篇我已经把VirtualPa ...
- 【转载】ASP.NET MVC中Controller与View之间的数据传递总结
在ASP.NET MVC中,经常会在Controller与View之间传递数据,因此,熟练.灵活的掌握这两层之间的数据传递方法就非常重要.本文从两个方面进行探讨: Ø Controller向View传 ...
- mvc后台字符串转换html,在mvc中,使用summernote编辑器,我想发送数据的内容字符串和HTML到控制器...
我是MVC的首发,所以有一些我不能做的. Summernote编辑器用于编写博客,Ajax用于发布.在这个编辑器里面写了一些字符后,smmernote编辑器和其他字符串数据中的这个html数据必须和a ...
- FineUIMvc随笔(6)对比WebForms和MVC中表格的数据库分页
声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 通过对比WebForms和MVC中表格数据库分页代码的不同,可以对 MVC 中的数据流转有更加深入的了解. WebForms 中 ...
最新文章
- Linux下的iwpriv(iwlist、iwconfig)的简单应用
- 图论:弦图最小点染色
- linux nslookup命令安装,在CentOS中安装nslookup命令
- ios开发网络学习九:NSURLSessionDownloadTask实现大文件下载
- JavaScript十六进制、八进制、二进制与十进制互转
- K8S专题-基础组件的部署1
- php自带excel,基于php中使用excel的简单介绍_PHP
- Java docx4j 操作word 2.1
- vue源码之数据侦测
- win10家庭版设置护眼色
- 阿里云域名解析ip地址变更后不起作用
- Python爬取Facebook公共主页帖子
- 【深度学习基础】Epoch, Batch, Iteration这三个概念的区别与联系
- php对比两张数据表,【后端开发】PHP比较两个表不同数据
- 网格建模资源管理(第一次翻译老外的东西,嘿嘿!)
- (C++题目)定义一个描述学生基本情况的类Student,数据成员包括姓名、学号、英语成绩和高数成绩;成员函数包括构造函数、析构函数、获取姓名、获取学号、求出平均成绩,以及显示各
- R实现一次性合并多个数据框
- 小程序:小程序获取焦点事件
- 转载:80,90后需要提前领悟的至高心法
- 灰度共生矩阵的原理及代码实现(python)