jQuery大神幫你做後台 - 放資料篇

jQuery大神幫你做後台 - 放資料篇

我們在開發後台網站的時候

基本上就是針對每張表格

 

做編輯功能給使用者操作

但其實每頁功能都大同小異

 

我們卻要麻煩的要死的寫這樣的程式碼


public void DetailData(int itemId)
{
      Student stu = new Student(itemId);
      txtName.Text = stu.Name;
      txtAge.Text = stu.Age.ToString();
}

 

坦白說, 每頁都這樣寫會搞死人

 

而且做的事情根本都一樣, 幹麻用這麼麻煩的事情

 

而且放個資料還要AutoPostBack, 我個人覺得不是很符合效能啦 = =

 

 

後來改用AJAX跟PageMethod要資料

我假如要Maintain某筆資料

 

用AJAX跟PageMethod要了Student的實體回來, 大致上長這樣


{
      Name : 'John',
      Age : 13,
      Phone : '7997979979'
};

 

假如說我的維護頁面長這樣

 


<input type='text' id='txtName' />
<input type='text' id='txtAge' />
<input type='text' id='txtPhone' />





假如說格式都一樣, 欄位的id就是屬性名稱加上txt,  有沒有比較優雅的方式放資料?

我們可以拜請jQuery大神, 例如說用這個我已經寫好的UI


$.writeDom = function (container, obj) {
    if (!obj) return;
    var $container = $(container);

    $container.find(':text,textarea').each(function () {
        var $this = $(this); 
        var id = $this.attr('id');
        if (!id || id.length < 4) return;
        id = id.substr(3);  //習慣TextBox的ID都叫做 txt{AttrName}
		
        if (obj[id] && obj[id]) {
            $this.val(obj[id]);
        }
    });

    $container.find('select').each(function () {
        var $this = $(this);
        var id = $this.attr('id');
        if (!id || id.length < 4) return;
        id = id.substr(3);  //習慣Select的ID都叫做 ddl{AttrName}
        if (obj[id])
            $this.find('option[value=' + obj[id] + ']').attr('selected', true);
    });

    $container.find(':radio').each(function () {
        var $this = $(this); //習慣Radio的ID都叫做 rbl{AttrName}
        if ($this.not('[done=true]')) {
            var id = $this.attr('name');
            var $radios;
            if (id && id.length > 0) {
                $radios = $container.find('[name=' + id + ']');
            }
            else {
                $radios = $this;
                id = $this.attr('id');
            }
            if (id && id.length > 4) {
                id = id.substr(3);
            }
            $radios.filter('[value=' + obj[id] + ']').attr('checked', true);
            $radios.attr('done', true);
        }
    }).removeAttr('done');
};

 

接著就可以在success的地方呼叫  $writeDom('#editArea', obj);

jQuery就會自動用#editArea  (要放詳細資料的一個區域, 例如是在dialog裡面的div, 或著一個form)

去把裡面的input給撈出來, 用他們的Id去找尋obj裡面是否有這個屬性

 

有的話就把值寫進去

 

也就是說, 只要命名規則定好  (物件屬性 –> HTML的INPUT欄位ID)

可以每一頁都呼叫這支jQuery UI, 讓他自動幫忙放資料

 

 

在配合AJAX跟PageMethod,  可以讓後台放資料的程式碼精簡到不行

 

 

附註: 上方的範例是我for自己的習慣寫的UI,  其實規則很簡單,  也可以嘗試自己幫自己的專案寫一個UI

假如我寫的有什麼不正確的地方也請指正  感激  <(_ _)>

 

(我是用INPUT的ID去反查obj的ATTR,   當然也可以用OBJ的ATTR去查有沒有對應的INPUT, 

 反正jQuery是神,  吃的也是Client端的記憶體  OK的)

 

--

本文可能有理解錯誤  或不盡不實的地方

請路過的前輩不要客氣  用力打醒

這會是我們成長的主要養分