На днях возникла задача на проверку входных данных от пользователей: запретить отступы у строковых данных в начале и в конце. Модель большая, делать у каждого свойства типа string что-то в стиле
Name=model.Name.IfNotNull(x=>x.Trim())
не хотелось. По этому пришлось поискать в интернете. Наткнулась на фильтр, который переписывает request модель в web-api-добавляет определенный данные, причем сам тип модели не известен. Немного переделав код, получился вот такой фильтр:
public class TrimFieldFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
foreach (var keyValuePair in actionContext.ActionArguments)
{
var model = actionContext.ActionArguments[keyValuePair.Key];
if (model == null)
continue;
var properties = model.GetType().GetProperties();
for (int index = 0; index < properties.Length; index++)
{
var property = properties[index];
var yui = property.GetValue(model, null) as string;
if (yui == null) continue;
property.SetValue(model, yui.Trim(), null);
}
}
}
}
Его также можно подключить к любому методу. Он вытягивает при помощи System.Reflection значения типа string у любой request модели, и уже вызывает метод Trim().
На стороне клиента можно так же запрещать ввод пробела в начале и в конце.
Долго думать не пришлось: на проекте почти везде у элементов input type="text" один класс. На него можно повесить событие focusout, которое так же будет вызывать метод trim()+нет ошибок если не ввели данные.
На стороне клиента можно так же запрещать ввод пробела в начале и в конце.
Долго думать не пришлось: на проекте почти везде у элементов input type="text" один класс. На него можно повесить событие focusout, которое так же будет вызывать метод trim()+нет ошибок если не ввели данные.
Комментариев нет:
Отправить комментарий