модель привязки URL закодированной строки MVC 3 - PullRequest
1 голос
/ 05 сентября 2011

Я использую привязку модели MVC 3 в сочетании с сериализатором JQuery () для редактирования некоторых данных в форме.Все работает хорошо, за исключением случаев, когда у меня есть некоторый текст в кодировке URL (не знаю лучшего термина) в моих данных.Эти данные есть, потому что я использую текстовый редактор, такой же, как тот, который я использую сейчас.

$.post("/controller/submit", $("form").serialize(), function (r) {....}

А мой контроллер похож на

[HttpPost]
public ActionResult Confirm(MyViewModel model)
{
    return PartialView(model);
}

Некоторые данные, которые могут вызвать проблемы, выглядят такthis

Место проведения = dasd & StartDate = 5 сентября 2011 года и startTime = 0% 3A00 & endTime = 0% 3A00 & EndDate = 6 сентября 2011 года & Title = Привет & Описание =% 3Cstrong% 3Ebold + mother% 3C% 2Fstrong% 3E & Цена на покупку = 3E & Цена на покупку = Цена= & CategoryId = 1 & Url = & Bid = 0 & MaximumExpense = 0

Вы можете видеть, что в описании есть такие вещи, как% 3Cstrong% 3E, потому что это сериализованное текстовое поле с некоторым HTML-кодированным текстом.Могу ли я получить связыватель модели по умолчанию, чтобы просто получить HTML, или я могу изменить способ сериализации формы JQuery?Или я должен использовать вместо JSON?

1 Ответ

2 голосов
/ 05 сентября 2011

Метод .serialize() делает то, что должен делать.Больше ничего не нужно делать на стороне клиента.Проблема в том, что сервер отклонит этот ввод.Вы можете украсить ваше свойство Description в модели представления с помощью атрибута [AllowHtml]:

[AllowHtml]
public string Description { get; set; }

Теперь связыватель модели по умолчанию будет счастлив присвоить это значение.Теперь, потому что какой-то злонамеренный пользователь может решить сделать неприятные вещи с вашим сайтом, если вы когда-нибудь намереваетесь показать этот HTML-код, убедитесь, что вы пропустили его через AntiXss .Если вы всегда будете отображать это значение в кодировке HTML, тогда вы в полной безопасности => просто сохраните его как есть в базе данных и отобразите в кодировке HTML.

...