2011-10-12 14 views
0

我想我知道這個問題的答案,但它絕不會傷害問...C#.NET Request.Param

我們的.NET應用程序需要存儲與數據庫中的名稱的東西。我們剛剛發現了一些領先空間的領域。

1)我可以通過我們存儲在數據庫中的每一個字段,並修改每個值之前,但我真的想避免必須這樣做,並忘記下一次添加字段。

2)另一種方法是在之前修整所有請求參數,將它們處理成控制器動作參數列表中的對象。這對我來說似乎最清潔,因爲它會覆蓋任何可能性。然而,它看起來像請求參數只在運行時讀取,即使我編寫代碼,編譯器也很樂意讓我把參數放在lhs上。

3)最後,我可以修整所有的價值之前,他們被傳送到服務器。我可以很容易地做到這一點b/c我使用extjs,並可以添加一個全局的'getRawValue()'從表單字段中提取時修剪字符串。這不太吸引人,更多的是基於哲學理由:前端不應該執行任務來確保數據庫狀態良好。

-

它看起來像(3)是最好的選擇(對我來說)。註釋?

+0

您是否使用存儲過程來插入/更新數據庫? –

+0

您使用ORM還是直接使用ADO.NET? –

+0

@ agent-j:我們直接插入/更新表 – horace

回答

0

這聽起來像你使用MVC。將參數綁定到動作參數時,可以使用自定義模型綁定器來修剪字符串值。

模型聯編程序是將請求參數轉換爲傳遞到控制器操作中的實際對象的服務。請參閱this link以獲得很好的解釋。

雖然我還沒有完成這件事我自己,似乎這樣的事情應該工作:

public class MyModelBinder : DefaultModelBinder 
{ 
    protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value) 
    { 
     var valString = value as string; 
     if(valString != null) 
     { 
      value = valString.Trim(); 
     } 
     base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value); 
    } 
} 

你基本上就覆蓋缺省行爲修剪任何字符串值,將其設置爲一個前值動作參數或動作參數的屬性。

我還沒有想出如何將此註冊爲ASP.NET MVC的默認模型綁定器:這可能實際上取決於您的IoC容器。

+0

謝謝。是的,它是mvc。我對mvc相當陌生,但我對模型的理解是視圖顯示來自模型的數據。當我搜索自定義模型綁定時,我會看到有關模型和視圖的東西,而不是動作參數。您能否將更多肉放在骨骼上? ;-) thanx! – horace

+0

@horace:我充實了一下。恐怕我沒有時間做更多。做一些探索,看看它是否適合你。 – StriplingWarrior

+0

謝謝你更大的推動力。那是關於我需要的。將在第二天或第二天(在我所有的空閒時間!)回顧這一切,並讓你知道我最終做了什麼。 - thx – horace