C # 6 में सुधार के साथ, अब आप एक बहुत कॉम्पैक्ट मॉडल बाइंडर लिख सकते हैं जो सभी स्ट्रिंग इनपुट को ट्रिम कर देगा:
public class TrimStringModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
var attemptedValue = value?.AttemptedValue;
return string.IsNullOrWhiteSpace(attemptedValue) ? attemptedValue : attemptedValue.Trim();
}
}
बाइंडिंग s के दौरान मॉडल बाइंडर का उपयोग करने के लिए आपको इस लाइन Application_Start()
को अपनी Global.asax.cs
फ़ाइल में कहीं न कहीं शामिल करना होगा string
:
ModelBinders.Binders.Add(typeof(string), new TrimStringModelBinder());
मुझे लगता है कि डिफ़ॉल्ट मॉडल बाइंडर को ओवरराइड करने के बजाय, इस तरह के मॉडल बाइंडर का उपयोग करना बेहतर होता है, क्योंकि तब इसका उपयोग तब किया जाएगा जब आप एक बाध्यकारी हैं string
, चाहे वह सीधे तौर पर एक विधि तर्क के रूप में हो या मॉडल वर्ग पर एक संपत्ति के रूप में हो। हालाँकि, यदि आप डिफ़ॉल्ट मॉडल बाइंडर को ओवरराइड करते हैं, जैसा कि यहां दिए गए अन्य उत्तरों से पता चलता है, यह केवल तभी काम करेगा जब मॉडल पर संपत्तियों को बाइंड किया जाएगा, न कि जब आपके पास string
एक्शन विधि के तर्क के रूप में हो
संपादित करें: एक टिप्पणीकार ने उस स्थिति से निपटने के बारे में पूछा जब किसी क्षेत्र को मान्य नहीं किया जाना चाहिए। ओपी ने जो सवाल किया था, उससे निपटने के लिए मेरा मूल उत्तर कम हो गया था, लेकिन जो लोग रुचि रखते हैं, आप निम्नलिखित विस्तारित मॉडल बाइंडर का उपयोग करके सत्यापन से निपट सकते हैं:
public class TrimStringModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled;
var unvalidatedValueProvider = bindingContext.ValueProvider as IUnvalidatedValueProvider;
var value = unvalidatedValueProvider == null ?
bindingContext.ValueProvider.GetValue(bindingContext.ModelName) :
unvalidatedValueProvider.GetValue(bindingContext.ModelName, !shouldPerformRequestValidation);
var attemptedValue = value?.AttemptedValue;
return string.IsNullOrWhiteSpace(attemptedValue) ? attemptedValue : attemptedValue.Trim();
}
}