2010年10月3日 星期日

MVC2 Trim String

在MVC2中,加設我們有一個產品(Product)的資料需要維護,我們在Edit或者是Create的Form中,我們修改了一些欄位上的資料,我們希望可以將每個欄位多餘的空白字元去除(trim space),以免儲存回資料庫後,再次取出時,會產生錯誤,例如我們如果在Create的Form中,將產品的識別碼(PrdID)給輸入「A001  」,後面部小心多了一些空白字元,若是沒有在儲存回資料庫前,將這個欄位後面的空白去除掉,當這項產品儲存在資料庫後,我們再次輸入「A001」,要將這項產品編號的產品給查詢出來時,系統就會告訴我們找不到這項產品。因為資料庫存的是「A001  」,而非「A001」。本文基於MVC的架構,自View-Colltroller-Model這三個層次順序,由外圍到底層,說明如何簡單的使用既有的方法去達成去除字串後面多餘的空白字元。


1.在View中使用javascript/jQuery


當然在View的層面,可以用javascript或者是jQuery在使用者前端的瀏覽器上就針對這個PrdID欄位輸入的空白字串給去除,如用下列的方法可以達到去除字串前後空白(Right trim and Left trim)

   1:  function trim(stringToTrim) {
   2:      return stringToTrim.replace(/^\s+|\s+$/g, ""); 
   3:  }

2.在Colltroller中去除字串欄位後面的空白(Trim string in Colltroller)


本文中,我們主要針對在MVC2架構中如何進行去除輸入欄位字串後面空白的方法,這裡下面例子可以在接收Post回Colltroller的Create Action中以collection["PrdID"].Trim()這個方法,去除使用者不小心輸入PrdID這個欄位後面的空白字元,然後再將正確的PrdID這個字串儲存到資料庫中,如下:

在MVC2專案中程式位置://colltroller/ProductColltroller.cs

   1:  :
   2:  [HttpPost]
   3:  public ActionResult Create(FormCollection collection)
   4:  {
   5:      Product appToCreate = new Product();
   6:      prdToCreate.ModelState = this.ModelState;
   7:      collection.Set("PrdID", collection["PrdID"].Trim());
   8:      TryUpdateModel(prdToCreate, collection);
   9:      if (ModelState.IsValid)
  10:      {
  11:          //儲存至資料庫
  12:      return View("Success");
  13:      }
  14:      else 
  15:          return View(prdToCreate);    
  16:      }
  17:  }
3.在Entity Framework Model中去除字串欄位後面的空白(Trim string/value in Model)


這個方法,我們需打開MVC2專案中Model目錄內Entity Framework設定的Product.Designer.cs這個程式,自Model這個層面去移除使用者不小心輸入PrdID這個欄位後面的空白字元.這裡下面例子可以看到我們再set這個值之前,就用string.IsNullOrEmpty()這個方法,去除PrdID這個欄位後面的空白字元(如果有的話),然後再將正確的PrdID這個字串儲存到資料庫中,如下:
在MVC2專案中程式位置://Models/Product.Designer.cs

   1:  :
   2:  #region Entities
   3:  :
   4:  [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
   5:  [DataMemberAttribute()]
   6:  public global::System.String PrdID
   7:  {
   8:      get
   9:      {
  10:          return _PrdID;
  11:      }
  12:      set
  13:      {
  14:      value = (string.IsNullOrEmpty(value)) ? value : value.Trim();
  15:          OnPrdIDChanging(value);
  16:          ReportPropertyChanging("PrdID");
  17:          _PrdID = StructuralObject.SetValidValue(value, true);
  18:          ReportPropertyChanged("PrdID");
  19:          OnPrdIDChanged();
  20:      }
  21:  }

沒有留言:

張貼留言