結合Bootbox將後臺JSON數據填充Form表單

来源:https://www.cnblogs.com/FangKuaiGe/archive/2018/09/09/9614593.html
-Advertisement-
Play Games

序言: 剛結束公司的三個月試用期,意味著我即將正式步入社會成為廣大從事IT行業的一員。作為一個編程小白,無論從技術層面還是知識層面都是比較薄弱的,想要成為一個優秀的程式員不斷的學習與探索是不可避免的。我相信一切的付出與收穫是成正比的!Fighting! 這幾天在做公司的實際項目的時候,需要實現選中B ...


本文介紹瞭如何結合Bootbox將後臺JSON數據填充到Form表單中,同時也介紹了一些需要使用的知識的學習途徑,並附上了參考文檔地址與學習網址,對此感興趣的伙伴可以直接訪問學習。為了方便介紹,使用了一個小例子模擬這一過程幫助理解與分析。本文內容不深奧但是挺實用,也有一定的擴展性,我覺得值得與大家一起分享。

序言:

剛結束公司的三個月試用期,意味著我即將正式步入社會成為廣大從事IT行業的一員。作為一個編程小白,無論從技術層面還是知識層面都是比較薄弱的,想要成為一個優秀的程式員不斷的學習與探索是不可避免的。我相信一切的付出與收穫是成正比的!Fighting!

這幾天在做公司的實際項目的時候,需要實現選中Bootstrap table中的任意一行數據點擊編輯按鈕彈出一個模態框以表單的形式對該行數據進行編輯。獲取表格行的數據是比較方便的,具體可以查找Bootstrap table參考文檔,具體地址可以直接在瀏覽器中搜索關鍵字“Bootstrap table”查找,也可以訪問以下地址:http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/。表內的數據是獲得了,那關鍵是怎樣將表內數據傳遞到模態框中的表單呢?我們知道table內的數據是從後臺傳過來的,那模態框內表單數據不是也可以從後臺直接拿!好了知道數據要從哪裡來了,那現在我們需要解決的問題是怎樣確定是表格中的哪條數據傳到表單。表格中的每條數據都是有唯一標識的,可能是一個欄位也可能是多個欄位組成一個唯一的標識,我們就把它/它們當做是這行數據的Key,我們在控制器中將這個Key作為參數傳到後臺查找這個Key對應的數據,這樣要傳遞的數據也找到了。那就只剩將後臺數據傳輸到前臺了,想到後臺與前臺的傳值那我們就需要用到Ajax了,原生的Ajax是比較複雜的,這裡我們就使用jQuery封裝好的Ajax,使用比較方便。數據是能傳遞到前臺了,那數據怎樣賦值給每個標簽呢,畢竟數據不是智能的,不能自己對號入座。接下來就是比較好玩的東西了,自己寫一個jQuery方法判斷前臺標簽的類型依次將標簽中的name值賦值JSON對象對應的屬性名字。JSON對象可以看做是一個鍵值對數組,只要獲得鍵的名字,該鍵的值也能獲得,這樣前臺的數據也能依次呈現出來。

後面我用一個小例子來模擬後臺JSON數據填充Form表單的過程,方便大家能更好的瞭解這個過程。以上描述與想法都是本人個人認知,寫博客也是為了記錄自己的學習收穫與心得,存在錯誤或者偏差希望能得到各位前輩糾正和指導。

預備:

接下來我們演示的例子將會用到ASP.NET MVCjQueryAjaxBootboxHTML等相關的知識,還不懂的小伙伴需要提前做一下功課。現在網上的學習資源很豐富,稍微花點時間還是能學到很多東西。ASP.NET MVC相關的知識可以在博客園中很多前輩的博客中學習。Bootbox相關的可以直接去官方網站查看參考文檔,具體地址可以直接在瀏覽器中搜索關鍵字“Bootbox查找,也可以訪問以下地址:http://bootboxjs.com/documentation.html。其他相關的知識可以在瀏覽器中搜索關鍵字“w3school”查找,也可以直接訪問以下地址:http://www.w3school.com.cn/

項目介紹:

通過控制器創建一個Index視圖,寫入下列HTML代碼,這裡我創建了一個分部視圖,不創建直接寫在同一個頁面也是一樣的效果。為了更加直觀的顯示數據傳遞時的頁面變化我就不將分部視圖外的“DIV”標簽增加“hidden”屬性。在正常的情況下,我們需要將原先頁面分部視圖中的Form表單隱藏掉,因為使用了Bootbox,在點擊“Full FORM”按鈕時會自動生成一個模態框,裡面克隆了表單內的所有元素內容。

 1 <h2>Jackson Personal Homepage</h2>
 2 
 3 <div class="control-group">
 4     <label class="control-label">Full FORM</label>
 5     <btn id="btnGet" class="btn btn-success">Full FORM</btn>
 6 </div>
 7 
 8 <div>
 9     @Html.Partial("_GetForm")
10 </div>
View Code

分部視圖_GetForm.cshtml

 1 <form class="form-horizontal" id="JsonForm">
 2 
 3     <div class="control-group">
 4         <!-- Name input-->
 5         <label class="control-label">Name</label>
 6         <div class="controls">
 7             <input type="text" placeholder="Input Name Please" name="Name">
 8         </div>
 9     </div>
10 
11     <div class="control-group">
12         <!-- Age input-->
13         <label class="control-label">Age</label>
14         <div class="controls">
15             <input type="text" placeholder="Input Age Please" name="Age">
16         </div>
17     </div>
18 
19     <div class="control-group">
20         <label class="control-label">Gender</label>
21         <div class="controls">
22             <!-- Multiple Radios -->
23             <label class="radio">
24                 <input type="radio" value="Man" name="Gender">
25                 Handsome Boy
26             </label>
27             <label class="radio">
28                 <input type="radio" value="Woman" name="Gender">
29                 Beautiful Girl
30             </label>
31         </div>
32 
33     </div>
34 
35     <div class="control-group">
36         <!-- Select Basic -->
37         <label class="control-label">Nationality</label>
38         <div class="controls">
39             <select name="Nationality">
40                 <option></option>
41             </select>
42         </div>
43     </div>
44 
45     <div class="control-group">
46         <!-- Textarea -->
47         <label class="control-label">Specialty</label>
48         <div class="controls">
49             <div class="textarea">
50                 <textarea type="text" name="Specialty"> </textarea>
51             </div>
52         </div>
53     </div>
54 
55 </form>
View Code

我們需要傳遞一條JSON數據,所以我就在控制器中創建了一個person對象,將這個對象轉成JSON格式來模擬,通過GetJson()這個方法傳遞給前臺。

1 [HttpPost]
2 public JsonResult GetJson()
3 {
4    Person person = new Person() { Name = "Jackson", Age = 24, Gender = "Man", Nationality = "China", Specialty = "Attentive And Patient" };
5    return Json(person);
6 }
View Code

前臺調用GetJson()方法,需要使用Ajax,所以我們在前臺寫一個按鈕的點擊事件觸發這個方法,將數據傳遞過來,然後將數據傳入自己寫的jQuery方法,根據元素的類型判斷依次為其賦對應的值,之後執行Bootboxdialog方法,將表單及數據通過模態框方式顯示。

 1 <script>
 2     $("#btnGet").click(function () {
 3         $.ajax({
 4             url: "GetJson",
 5             type: "post",
 6             dataType: "json",
 7             success: function (data) {
 8                 $("#JsonForm").populateForm(data);
 9                 bootbox.dialog({
10                     title: "This is Form :)", 
11                     message: $("#JsonForm").clone(),
12                     buttons: {
13                         confirm: {
14                             label: 'Submit',
15                             className: 'btn-success'
16                         },
17                         cancel: {
18                             label: 'Quit',
19                             className: 'btn-danger'
20                         }
21                     },
22                 });
23             }
24         })
25     })
26 </script>
View Code

接下來是最關鍵的部分,是這個功能得以實現的核心,上述的代碼中有一句“$("#JsonForm”).populateForm(data);”這裡的populateForm()就是自己定義的一個jQuery方法,代碼是參考了某位前輩的代碼,只是做出稍微修改。如果分析的複雜一點完全可以封裝成一個通用的jQuery方法以滿足不同的條件復用。以下代碼寫在一個名字為"GetJsonForm.js"的javascript文件中。

 1 $.fn.populateForm = function (data) {
 2     return this.each(function () {
 3         var formElem, name;
 4         if (data === null) { this.reset(); return; }
 5         for (var i = 0; i < this.length; i++) {
 6             formElem = this.elements[i];
 7             name = formElem.name;
 8             switch (formElem.type) {
 9                 case "radio":
10                     if (data[name] === "") {
11                         formElem.checked = false;
12                     } else if (formElem.value === data[name]) {
13                         formElem.checked = true;
14                     }
15                     break;
16                 case "select-one":
17                     formElem[0].value = data[name];
18                     if (data[name] === null) {
19                         formElem[0].text = "--";
20                     } else {
21                         formElem[0].text = data[name];
22                     }
23                     break;
24                 case "button": break;
25                 default:
26                     if (data[name] === null) {
27                         formElem.value = "--";
28                     } else {
29                         formElem.value = data[name];
30                     }
31             }
32         }
33     });
34 };
View Code

確保GetJsonForm.js以及Bootbox依賴的文件正確被引用(這裡Bootbox引用的是“bootbox.min.js”,可以在起官網下載)。

以上項目就完成了...

總結分析:

需要著重分析一下"GetJsonForm.js"里的代碼,從分析的過程中我們能更加詳細的知道其實現原理,便於之後的擴展與完善,封裝成一個滿足各種條件的方法。當前項目取得是一個單一的JSON對象,但是很多情況下JSON數據可能會更加複雜,而且我們這裡只試驗了對錶單中其中幾種常用類型的標簽賦值,功能是不完善的。其中select標簽的賦值方式也不是很完善,只能滿足於與該項目相似的項目,完善還是需要花更多的時間。

以上是我在做項目時的獲得的所有心得,可能不是很完善也存在很多錯誤,歡迎各位糾正。

ps:在做項目的時候遇到一個問題,就是Bootbox文檔里描述dialog方法中的"message"可以傳html,當代碼為:

$("JsonForm”).html();

時模態框載入頁面但是只有select標簽下的option值被賦值了,其他值就是不顯示,將代碼改為:

$("JsonForm”).clone();

時就全部顯示正常了,這個問題仍然想不通...

執行的結果

 

[代碼為”$("JsonForm”).clone();”時的結果]

[代碼為”$("JsonForm”).html();”時的結果]

百度雲盤:鏈接:https://pan.baidu.com/s/1eL1ftDhN2_Hx9H99XmWlhQ 密碼:iuss

感興趣的小伙伴可以自行下載(IDE:visual studio 2017

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 計劃寫的博客的目錄。我會一個一個的去寫,寫完後,更新相應的鏈接到對應的博客目錄 ...
  • MySQL中一條SQL的加鎖分析 id主鍵 + RC id唯一索引 + RC id非唯一索引 + RC id無索引 + RC id主鍵 + RR id唯一索引 + RR id非唯一索引 + RR id無索引 + RR Serializable 一條複雜的SQL 死鎖原理與分析 SQL1:select ...
  • 本文適合這些人閱讀:iOS開發者、Android開發者、小程式開發人員、H5開發人員等客戶端開發人員。 今天要給客戶端開發者們介紹的一個介面是iiiLab提供的視頻去水印解析介面,介面特點: 1. 通用介面支持解析抖音、快手、火山、今日頭條、西瓜視頻、微博、秒拍、小咖秀、晃咖、微視、美拍、網易雲音樂 ...
  • 標把1-10之間所有的奇數,放到數組中,既然是1--10的奇數,那就要判斷,判斷是否是奇數,當然也要定義一個空的數組,如果判斷的結果是奇數,那就將結果存放在空的數組中。 第一種方法,是運用數組的方法,將奇數追加在空數組中, 第二種方法,將數組的索引值寫成數組的長度,並將索引值賦值 第三種方法,定義一 ...
  • 一、JavaScript特點 二、JavaScript三大部分:(ECMAScript、DOM、BOM) 三、JavaScript的基本語法 變數聲明 Js是一種弱數據類型的語言,任何類型的變數都用關鍵字Var來聲明。 賦值可以在聲明的的同時賦值,也可以在後面賦值。 這兩種方法是一樣的。 同時有一種 ...
  • 淺談CORS CORS全稱“跨站資源共用”(Cross Origin Resource Sharing),它允許瀏覽器剋服瀏覽器同源策略向跨域伺服器發出請求。 同源策略 概念 說到CORS,那麼就不得不提瀏覽器同源策略,所謂“同源”,是指伺服器URL的三個相同: 1.協議相同 2.功能變數名稱相同 3.埠 ...
  • 來自:https://blog.csdn.net/qq_35430000/article/details/79412664#commentBox github倉庫地址:https://github.com/byla678/vuexdemo.git 侵刪 ...
  • /* * pending:初始化成功 * fulfilled:成功 * rejected:失敗 * */ function Promise(executor) {// 執行器 this.status = 'pending'; this.value = undefined; this.reason =... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...