用户需求是:一个表单一旦建立完,个中大部份的字段便不可再编辑。只能编辑个中部份字段。
而不可编辑是经由过程对input输入框设置disabled属性完成的,那末这时刻候直接向数据库中submit表单中的内容就会报错,因为有些不能为null的字段因为disabled属性基础没法在前端被猎取然后更新至数据库。
有下面两种思绪:
1.经由过程建立隐蔽表单,为每个disabled控件离别建立一个隐蔽控件,然则如许的问题是事情量太大(假如表单有一千个属性,你懂的)
2.经由过程猎取该表单在数据库中的id,把该id和能够编辑的字段通报到背景。起首经由过程id将对象及其属性数据从数据库中搜刮出来,然后将能够编辑的字段赋值给该对象。处理完毕后,再将该对象的数据更新至数据库。
综上所述,用第二种思绪能显得越发睿智。
下面是细致的操纵步骤:(细致步骤就不必细看了,这是我从项目中抽出来的,只合适我本身回忆)
1.在OutsourcingModule.cs中建立路由,以此建立一个接见途径:
routes.MapRoute( "OutSourcingWorkSheet",//路由名 "outsourcing/saveWorkSheet",//url途径 new {controller = "Outsourcing", action = "SaveWorkSheet"}//映照的控制器以及对应的Action要领名 );
2.
/// <summary> /// 保留事情票 /// ModelBinder会将前端通报过来的id在数据库中搜刮出字段而且转换为outsourcing对象 /// 此时的outsourcing对象中的workSheets属性不是前端通报过来的值,而是数据库中的 /// /// 要领中有两个参数,outsourcing上面已诠释,workSheets是前端通报过来的第二个参数 /// </summary> /// <param name="outsourcing"></param> /// <param name="workSheets"></param> /// <returns></returns> [HttpPost] [ActionName("SaveWorkSheet")] [AccessRestriction("SaveWorkSheet")] public JsonResult SaveWorkSheet(Outsourcing outsourcing,string workSheets) { if (outsourcing!=null) { outsourcing.WorkSheets = workSheets; _outsourcingService.Save(outsourcing); return Json(new ABResponse(HttpStatusCode.OK)); } return Json(new ABResponse(HttpStatusCode.BadRequest)); }//AB为内部项目
3.前端js剧本代码
$('#btn_saveWorkSheet').on('click', function () { if ($("input[name=workSheets]").val() == "") { bootbox.alert("不能为空"); } else { $.ajax({ type: "post", url: "/outsourcing/saveWorkSheet", data: { ID: $("#outsourcing_id").val(), WorkSheets: $("input[name=workSheets]").val() }, dataType: "json", success: function (data) { if (data.Code == 200) { bootbox.alert("修正胜利,行将革新"); setTimeout(function () { location.reload(); }, 1000); } else { bootbox.alert("提交失利,请稍后再试"); } } }); } });
实在思绪很简单,然则我特么做了大半天- -;个中还遇到了一个大坑:
在第二段代码的参数列表中,我一开始把string workSheets写成了WorkSheets。这时刻笔墨下涌现了蓝色的波浪线,Alt+Enter后体系提醒Rename to workSheets,我便直接回车肯定了。然后,WorkSheets字段便再也没法保留,也不能从数据库中读取。在同事帮助找了N久以后发明,原来是当时大写改小写的过程当中同时将dbml文件中的字段也改成了小写致使了没法和数据库婚配。
做这个功用的时刻趁便学到的一点学问:
假如一个input的id为apple,那末能够这么猎取,这是我本来就晓得的:
var apple = $("#apple").val();
假如一个input的name为apple,那末能够这么猎取,这是我刚晓得的:
var apple = $("input[name=apple]").val();
另有一个刚晓得的,假如从许多input中去除某个name:
$("#fruit").find("input:not(input[name=apple]),textarea,select").attr("disabled", true); //从id为fruit的父元素内里寻觅一切的input、textarea和select控件以及其值,然则撤除name为apple的控件
别的总结下ajax的体式格局,良久不必都快忘了:
$.ajax({ type:"post",//能够挑选post或许method url:"",//url接口 data:{ //参数列表 }, success:function(data){ //假如接见url胜利,data就是该url接口自动返回的数据 } })
总结
以上就是分享Asp.Net MVC4怎样完成经由过程id更新表单内容的实例剖析的细致内容,更多请关注ki4网别的相干文章!