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与后台多次交互操作相关推荐

  1. ASP.NET MVC中controller和view相互传值的方式

    ASP.NET MVC中Controller向view传值的方式: ViewBag.ViewData.TempData 单个值的传递 Json 匿名类型 ExpandoObject Cookie Vi ...

  2. MVC中的View2(转)

    MVC中View是专门用来向浏览器显示结果的,它只负责把传入到View的数据展现给用户: 一,自定义view引擎:实现IViewEngine接口 namespaceSystem.Web.Mvc { p ...

  3. 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 ...

  4. 通过源代码研究ASP.NET MVC中的Controller和View(二)

    通过源代码研究ASP.NET MVC中的Controller和View(一) 在开始之前,先来温习下上一篇文章中的结论(推论): IView是所有HTML视图的抽象 ActionResult是Cont ...

  5. asp.net mvc中的后台验证

    asp.net mvc的验证包含后台验证和前端验证.后台验证主要通过数据注解的形式实现对model中属性的验证,其验证过程发生在model绑定的过程中.前端验证是通过结合jquery.validate ...

  6. 通过源代码研究ASP.NET MVC中的Controller和View(三)

    通过源代码研究ASP.NET MVC中的Controller和View(一) 通过源代码研究ASP.NET MVC中的Controller和View(二) 第三篇来了,上一篇我已经把VirtualPa ...

  7. 【转载】ASP.NET MVC中Controller与View之间的数据传递总结

    在ASP.NET MVC中,经常会在Controller与View之间传递数据,因此,熟练.灵活的掌握这两层之间的数据传递方法就非常重要.本文从两个方面进行探讨: Ø Controller向View传 ...

  8. mvc后台字符串转换html,在mvc中,使用summernote编辑器,我想发送数据的内容字符串和HTML到控制器...

    我是MVC的首发,所以有一些我不能做的. Summernote编辑器用于编写博客,Ajax用于发布.在这个编辑器里面写了一些字符后,smmernote编辑器和其他字符串数据中的这个html数据必须和a ...

  9. FineUIMvc随笔(6)对比WebForms和MVC中表格的数据库分页

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 通过对比WebForms和MVC中表格数据库分页代码的不同,可以对 MVC 中的数据流转有更加深入的了解. WebForms 中 ...

最新文章

  1. Linux下的iwpriv(iwlist、iwconfig)的简单应用
  2. 图论:弦图最小点染色
  3. linux nslookup命令安装,在CentOS中安装nslookup命令
  4. ios开发网络学习九:NSURLSessionDownloadTask实现大文件下载
  5. JavaScript十六进制、八进制、二进制与十进制互转
  6. K8S专题-基础组件的部署1
  7. php自带excel,基于php中使用excel的简单介绍_PHP
  8. Java docx4j 操作word 2.1
  9. vue源码之数据侦测
  10. win10家庭版设置护眼色
  11. 阿里云域名解析ip地址变更后不起作用
  12. Python爬取Facebook公共主页帖子
  13. 【深度学习基础】Epoch, Batch, Iteration这三个概念的区别与联系
  14. php对比两张数据表,【后端开发】PHP比较两个表不同数据
  15. 网格建模资源管理(第一次翻译老外的东西,嘿嘿!)
  16. (C++题目)定义一个描述学生基本情况的类Student,数据成员包括姓名、学号、英语成绩和高数成绩;成员函数包括构造函数、析构函数、获取姓名、获取学号、求出平均成绩,以及显示各
  17. R实现一次性合并多个数据框
  18. 小程序:小程序获取焦点事件
  19. 转载:80,90后需要提前领悟的至高心法
  20. 灰度共生矩阵的原理及代码实现(python)

热门文章

  1. java获取Win系统日志最后(最新)开关机时间记录等
  2. Debezium 2.0.0.Final Released
  3. 00 后知道十几年前的手机这么好玩儿吗
  4. php培训视频 盘多多,SEO二十期培训视频教程
  5. 【主动投资组合管理】第3章 风险
  6. cpu软改vista 驱动_在Vista Service Pack 1中为所有驱动器设置自动碎片整理选项
  7. 常见国产卫星参数介绍
  8. 在号码池取连续号码的算法
  9. darwin之一万个定时器实现(IdleTask)
  10. Swift 解析 JSON