本文摘自PHP中文网,作者黄舟,侵删。
一个表单一旦创建完,其中大部分的字段便不可再编辑。只能编辑其中部分字段。下面通过本文给大家分享Asp.Net MVC4通过id更新表单内容的思路详解,需要的朋友参考下吧
用户需求是:一个表单一旦创建完,其中大部分的字段便不可再编辑。只能编辑其中部分字段。
而不可编辑是通过对input输入框设置disabled属性实现的,那么这时候直接向数据库中submit表单中的内容就会报错,因为有些不能为null的字段由于disabled属性根本无法在前端被获取而后更新至数据库。
有下面两种思路:
1.通过创建隐藏表单,为每一个disabled控件分别创建一个隐藏控件,但是这样的问题是工作量太大(如果表单有一千个属性,你懂的)
2.通过获取该表单在数据库中的id,把该id和可以编辑的字段传递到后台。首先通过id将对象及其属性数据从数据库中搜索出来,然后将可以编辑的字段赋值给该对象。处理完毕后,再将该对象的数据更新至数据库。
综上所述,用第二种思路能显得更加睿智。
下面是具体的操作步骤:(具体步骤就不用细看了,这是我从项目中抽出来的,只适合我自己回顾)
1.在OutsourcingModule.cs中创建路由,以此创建一个访问路径:
1
2
3
4
5
routes.MapRoute(
"OutSourcingWorkSheet"
,
"outsourcing/saveWorkSheet"
,
new
{controller =
"Outsourcing"
, action =
"SaveWorkSheet"
}
);
2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/// <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));
}
3.前端js脚本代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$(
'#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,那么可以这么获取,这是我本来就知道的:
1
var
apple = $(
"#apple"
).val();
如果一个input的name为apple,那么可以这么获取,这是我刚知道的:
1
var
apple = $(
"input[name=apple]"
).val();
还有一个刚知道的,如果从很多input中去除某个name:
1
2
$(
"#fruit"
).find(
"input:not(input[name=apple]),textarea,select"
).attr(
"disabled"
,
true
);
另外总结下ajax的方式,很久不用都快忘了:
1
2
3
4
5
6
7
8
9
10
$.ajax({
type:
"post"
,
url:
""
,
data:{
},
success:function(data){
}
})
总结
以上就是分享Asp.Net MVC4如何实现通过id更新表单内容的实例分析 的详细内容!
相关阅读 >>
分享asp.net 学习笔记(3)webpages 布局
asp.net 数据库密码:md5加密算法详解
asp.net 图形验证码生成实践
浅析asp.net 使用image/imagebutton空间显示本地图片的方法
深入了解asp.net mvc与webform的区别
asp.net 控制文件上传的大小方法(超简单)_实用技巧
《asp.net 》数据的绑定―repeater图文详解
asp.net 简单的格式转换方法
分享asp.net 学习笔记(10)webpages email
分享asp.net 学习笔记(8)webpages 帮助器
更多相关阅读请进入《asp.net 》频道 >>
¥125.8元 清华大学出版社
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。
转载请注明出处:木庄网络博客 » 分享Asp.Net MVC4如何实现通过id更新表单内容的实例分析