首页 > 编程 > .NET > 正文

Asp.Net MVC4通过id更新表单内容的思路详解

2024-07-10 12:49:00
字体:
来源:转载
供稿:网友

用户需求是:一个表单一旦创建完,其中大部分的字段便不可再编辑。只能编辑其中部分字段。

而不可编辑是通过对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("提交失败,请稍后再试");        }      }    });  }});            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表