Как обрезать() все входы по модели в С# 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);