JQuery формы представления дополнительных символов при отправке с textarea - PullRequest
1 голос
/ 18 августа 2010

Я использую плагин http://malsup.com/jquery/form/ для отправки некоторых форм через jQuery. В этих формах у меня есть пара текстовых полей. У меня есть простой скрипт, который ограничивает количество символов, которые могут быть введены в эти текстовые области, и все это прекрасно работает. Однако, когда я отправляю форму, смотря на полученное значение, размер элемента формы больше, по некоторым причинам были добавлены дополнительные \ r \ n \, а в некоторых случаях дополнительные пробелы.

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

1 Ответ

0 голосов
/ 19 августа 2010

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

Я заменил DefaultModelBinder на тот, который обрезает любой тип строки (это измененная версия, которую я нашелв сети, к сожалению, я не сделал заметки на сайте, поэтому не могу его отнести)

public class TrimmingModelBinder : DefaultModelBinder
{
    protected override void SetProperty(ControllerContext controllerContext,
                                        ModelBindingContext bindingContext,
                                        System.ComponentModel.PropertyDescriptor propertyDescriptor,
                                        object value) {
        string modelStateName = string.IsNullOrEmpty(bindingContext.ModelName) ?
            propertyDescriptor.Name :
            bindingContext.ModelName + "." + propertyDescriptor.Name;

        // only process strings
        if (propertyDescriptor.PropertyType == typeof(string))
        {
            if (bindingContext.ModelState[modelStateName] != null)
            {
                // modelstate already exists so overwrite it with our trimmed value
                var stringValue = (string)value;
                if (!string.IsNullOrEmpty(stringValue))
                    stringValue = stringValue.Trim();

                value = stringValue;
                bindingContext.ModelState[modelStateName].Value =
                  new ValueProviderResult(stringValue,
                    stringValue,
                    bindingContext.ModelState[modelStateName].Value.Culture);
                base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
            }
            else
            {
                // trim and pass to default model binder
                base.SetProperty(controllerContext, bindingContext, propertyDescriptor, (value == null) ? null : (value as string).Trim());
            }
        }
        else
        {
            base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
        }
    }
}

Затем в application_start просто подключите его так:

ModelBinders.Binders.DefaultBinder = new Kingsweb.Extensions.ModelBinders.TrimmingModelBinder();

И всеваши переменные будут обрезаны к тому времени, когда они попадут в методы действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...