Как обрезать() все входы по модели в С# MVC
Я нашел, что все значения, переданные моделью, не обрезаны в ASP.net MVC3
Есть ли способ:
- Примените trim() для каждого поля в Model (все строковые поля, по крайней мере, но все поля формы являются строками перед обработкой Model, поэтому лучше их обрезать)
- Обязательно перед
ModelState.IsValid()
(потому что я часто обнаружил, что код застрял в странном ModelState.IsValid
и позже нашел, потому что элемент формы не был обрезан.)
Спасибо.
Ответы
Ответ 1
Вам нужно будет создать настраиваемое связующее устройство, чтобы обрезать любое свойство модели, которое является строкой.
Ссылки:
Пользовательская привязка модели с использованием IModelBinder в ASP.NET MVC
Итерация на ASP.NET MVC Model Binder
6 советов по привязке модели ASP.NET MVC
Лучшая модель Binder
В принципе, вы можете взять один из двух подходов:
- Внедрить интерфейс
IModelBinder
- Подкласс класса
DefaultModelBinder
Пример
public class StringTrimmingBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
// trim your string here and act accordingly
// in the case the model property isn't a string
return base.BindModel(controllerContext, bindingContext);
}
}
Ответ 2
Просто FYI, я также написал небольшой JQuery Plug_in для моего проекта, чтобы использовать trim(), startsWith() и endsWith() для всех входных строк с клиентской стороны.
(function ($) {
String.prototype.trim = function ()
{ return (this.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, "")) };
String.prototype.startsWith = function (str)
{ return (this.match("^" + str) == str) };
String.prototype.endsWith = function (str)
{ return (this.match(str + "$") == str) };
})(jQuery);