c # .net Request.Param - PullRequest
       1

c # .net Request.Param

0 голосов
/ 12 октября 2011

Мне кажется, я знаю ответ на этот вопрос, но спрашивать никогда не мешает ...

нашему приложению .net необходимо хранить такие вещи, как имена, в базе данных.мы только что обнаружили несколько полей с начальными пробелами.

1) я мог бы пройти через каждое поле, которое мы храним в базе данных, и обрезать каждое значение перед его вводом. но я действительно хотел бы избежать необходимости делать этозабывая при следующем добавлении поля.

2) другим способом было бы обрезать все параметры запроса до того, как они будут обработаны в объекты в моем списке параметров действия контроллера.это кажется самым чистым для меня, потому что это покрыло бы любую возможность.однако похоже, что параметры запроса читаются только во время выполнения, даже если я напишу код, компилятор с радостью разрешит мне поместить параметр в lhs.

3) наконец, я могу обрезать всезначения, прежде чем они будут переданы на сервер.я могу сделать это очень легко, потому что я использую extjs и могу добавить глобальный getRawValue (), который обрезает строку при извлечении ее из поля формы.это менее привлекательно, скорее по философским соображениям: передний конец не должен выполнять задачи, чтобы гарантировать, что база данных находится в хорошем состоянии.

-

похоже, что (3) являетсялучший вариант (для меня).комментарии?

1 Ответ

0 голосов
/ 12 октября 2011

Похоже, вы используете MVC.Вы можете использовать пользовательский механизм связывания модели, который обрезает строковые значения при привязке параметров к параметрам вашего действия.

Связыватель модели - это сервис, который преобразует параметры запроса в реальные объекты, которые передаются в действия вашего контроллера.См. эту ссылку для хорошего объяснения.

Хотя я сам этого не делал, похоже, что-то подобное должно работать:

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.

...