Asp.Net MVC4通過id更新表單內(nèi)容的思路詳解
用戶需求是:一個表單一旦創(chuàng)建完,其中大部分的字段便不可再編輯。只能編輯其中部分字段。
而不可編輯是通過對input輸入框設(shè)置disabled屬性實現(xiàn)的,那么這時候直接向數(shù)據(jù)庫中submit表單中的內(nèi)容就會報錯,因為有些不能為null的字段由于disabled屬性根本無法在前端被獲取而后更新至數(shù)據(jù)庫。
有下面兩種思路:
1.通過創(chuàng)建隱藏表單,為每一個disabled控件分別創(chuàng)建一個隱藏控件,但是這樣的問題是工作量太大(如果表單有一千個屬性,你懂的)
2.通過獲取該表單在數(shù)據(jù)庫中的id,把該id和可以編輯的字段傳遞到后臺。首先通過id將對象及其屬性數(shù)據(jù)從數(shù)據(jù)庫中搜索出來,然后將可以編輯的字段賦值給該對象。處理完畢后,再將該對象的數(shù)據(jù)更新至數(shù)據(jù)庫。
綜上所述,用第二種思路能顯得更加睿智。
下面是具體的操作步驟:(具體步驟就不用細(xì)看了,這是我從項目中抽出來的,只適合我自己回顧)
1.在OutsourcingModule.cs中創(chuàng)建路由,以此創(chuàng)建一個訪問路徑:
routes.MapRoute(
"OutSourcingWorkSheet",//路由名
"outsourcing/saveWorkSheet",//url路徑
new {controller = "Outsourcing", action = "SaveWorkSheet"}//映射的控制器以及對應(yīng)的Action方法名
);
2.
/// <summary>
/// 保存工作票
/// ModelBinder會將前端傳遞過來的id在數(shù)據(jù)庫中搜索出字段并且轉(zhuǎn)換為outsourcing對象
/// 此時的outsourcing對象中的workSheets屬性不是前端傳遞過來的值,而是數(shù)據(jù)庫中的
///
/// 方法中有兩個參數(shù),outsourcing上面已經(jīng)解釋,workSheets是前端傳遞過來的第二個參數(shù)
/// </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為內(nèi)部項目
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("提交失敗,請稍后再試");
}
}
});
}
});
其實思路很簡單,但是我特么做了大半天- -;其中還遇到了一個大坑:
在第二段代碼的參數(shù)列表中,我一開始把string workSheets寫成了WorkSheets。這時文字下出現(xiàn)了藍(lán)色的波浪線,Alt+Enter后系統(tǒng)提示Rename to workSheets,我便直接回車確定了。然后,WorkSheets字段便再也無法保存,也不能從數(shù)據(jù)庫中讀取。在同事幫忙找了N久之后發(fā)現(xiàn),原來是當(dāng)時大寫改小寫的過程中同時將dbml文件中的字段也改成了小寫導(dǎo)致了無法和數(shù)據(jù)庫匹配。
做這個功能的時候順便學(xué)到的一點知識:
如果一個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的控件
另外總結(jié)下ajax的方式,很久不用都快忘了:
$.ajax({
type:"post",//可以選擇post或者method
url:"",//url接口
data:{
//參數(shù)列表
},
success:function(data){
//如果訪問url成功,data就是該url接口自動返回的數(shù)據(jù)
}
})
總結(jié)
以上所述是小編給大家介紹的Asp.Net MVC4通過id更新表單內(nèi)容的思路詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
ASP.NET Core中使用默認(rèn)MVC路由的配置
這篇文章主要介紹了ASP.NET Core中使用默認(rèn)MVC路由的配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
如何為CheckBoxList和RadioButtonList添加滾動條
這篇文章主要介紹了為CheckBoxList和RadioButtonList添加滾動條的方法,感興趣的小伙伴們可以參考一下2016-07-07
asp.net 自定義控件實現(xiàn)無刷新上傳圖片,立即顯示縮略圖,保存圖片縮略圖
自定義控件實現(xiàn)無刷新上傳圖片,立即顯示縮略圖,保存圖片縮略圖2010-01-01
ASP.NET設(shè)計網(wǎng)絡(luò)硬盤之下載或在線查看實現(xiàn)代碼
在目錄瀏覽中,如果選擇的是一個文件,單擊“打開”按鈕就可以進(jìn)行文件下載2012-10-10
C# XML操作 代碼大全(讀XML,寫XML,更新,刪除節(jié)點,與dataset結(jié)合等)
C#操作XML(讀XML,寫XML,更新,刪除節(jié)點,與dataset結(jié)合等),以下就是操作XML的所有方法,相信可以滿足很大一部份的使用了。2009-06-06
Asp.net實現(xiàn)無刷新調(diào)用后臺實體類數(shù)據(jù)并以Json格式返回
本文主要分享了Asp.net實現(xiàn)無刷新調(diào)用后臺實體類數(shù)據(jù)并以Json格式返回的具體實例方法,具有一定的參考價值,有需要的朋友可以看下2016-12-12
.NET?Core?Web?APi類庫內(nèi)嵌運行的方法
這篇文章主要介紹了.NET?Core?Web?APi類庫內(nèi)嵌運行的方法,本節(jié)我們重點討論如何內(nèi)嵌運行.NET Core Web APi類庫,同時介紹了兩種激活比如控制器特性方案,需要的朋友可以參考下2022-09-09
asp.net中IDataParameter調(diào)用存儲過程的實現(xiàn)方法
這篇文章主要介紹了asp.net中IDataParameter調(diào)用存儲過程的實現(xiàn)方法,在asp.net數(shù)據(jù)庫程序設(shè)計中非常具有實用價值,需要的朋友可以參考下2014-09-09

