2013-07-19 113 views
0

當用戶填寫我的表單以創建一個新的人員時,我希望在名稱前後不能有空格(類型String)。從表單提交中刪除空格

Good:「李四」

Bad:「李四」或「李四」

在這個SO post來看,似乎我想用一個自定義的模型綁定器。然而,因爲我可能錯誤地理解了這篇文章,所以替換我的DefaultModelBinder將意味着所有的字符串不會被允許有前導或尾隨的空白。

如何確保只有Name受此定製ModelBinder的影響?

+0

string.trim()?? – ssilas777

+0

該鏈接SO問題的關鍵是不明確修剪()每個字符串,所以我猜這也是這裏的情況。我想知道是否只用一個領域這麼複雜的方法是一個好主意。 –

+0

模型綁定解決方案對我來說聽起來有點過度。 –

回答

2

你可以寫這種行爲直接進入您的視圖模型(如果你使用的視圖模型):

private string name; 

public string Name 
{ 
    get { return this.name; } 

    set { this.name = value.Trim(); } 
} 

然後Name將抵達你的控制器的操作方法預修整。

+0

我不確定Boe Title(typo?)是什麼意思,但是最好在代碼中加入類似的代碼你的域名/應用程序實體改爲(或者也可以)。我儘量避免在數據庫查詢或存儲過程中添加任何這樣的邏輯。 –

0

您可以使用Trim函數。 來自MSDN,

修剪方法從當前字符串中刪除所有前導和尾隨空格字符。

+0

是的,謝謝。我仍然在找出合適的地方來放置'Trim()' –

+0

@Kevin你的表單(對話框?)是否有一個'Ok'按鈕讓用戶提交它們填充的內容?我認爲你只需要發佈 - 當他們實際按下'ok'或任何可以關閉你的表格的按鈕時,處理他們的名字 – young

0

您可以在屬性前提到的名字:

public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string FullName { get; set; } 

然後你就可以使用下面的修改後的代碼在後定製模型粘合劑解決方案,您所提到的:

public class TrimModelBinder : DefaultModelBinder 
{ 
    protected override void SetProperty(ControllerContext controllerContext, 
             ModelBindingContext bindingContext, 
             System.ComponentModel.PropertyDescriptor propertyDescriptor, object value) 
    { 
     if (propertyDescriptor.Name.ToUpper().Contains("NAME") 
      && (propertyDescriptor.PropertyType == typeof(string))) 
     { 
      var stringValue = (string) value; 
      if (!string.IsNullOrEmpty(stringValue)) 
       stringValue = stringValue.Trim(); 

      value = stringValue; 
     } 

     base.SetProperty(controllerContext, bindingContext, 
         propertyDescriptor, value); 
    } 
} 

這樣,任何名稱屬性,它的名稱和字符串類型將有白色空間修剪,因爲你想在這裏。