ASP.NET MVC AllowHtml ошибка или что-то, что я не правильно использовал - PullRequest
1 голос
/ 22 ноября 2011

Моя модель содержит строковое поле с именем "longdescription", которое получает значение содержимого редактора tinymce

Public class ArticleModel:BaseModel{
            [StringLength(8000, ErrorMessage = "Long description must be in 8000 characters or less"), AllowHtml]
    public string LongDescription { get; set; }
}

Вот мой код контроллера

[HttpPost]
public ActionResult AddEdit(ArticleModel model)
{
    string buttonName = Request.Form["Button"];
    if (buttonName == "Cancel")
        return RedirectToAction("Index");

    // something failed
    if (!ModelState.IsValid)
    {

     }

    // Update the articles
  }

Моя проблема в том, что яиспользуйте Request.Form для доступа к значению поста, он работает нормально, не выдавая ошибки «потенциально опасно…», но когда я использую Request.Params [«Button»], он выдает эти ошибки.Что-то мне не хватает?

Спасибо

Обновлено

Извините, ответ, который дал Адам, на самом деле не отвечает на мой вопрос.Кто-нибудь может дать больше предложений?

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011

В идеале вы не должны использовать.Это больше значений, ориентированных на веб-формы, даже если они «могут» использоваться.

Либо передайте элемент FormsCollection и проверьте его там с помощью collection ["Button"], либо даже лучше - ваша кнопка отмены, вероятно, должна простосделать перенаправление.Зачем публиковать, когда вы ничего не делаете, кроме перенаправления?

По вашему мнению, вы можете создать URL-адрес с помощью Url.Action () и поместить его в обработчик нажатия кнопки (на стороне клиента)

1 голос
/ 06 декабря 2011

Это геттер HttpRequest.Params создает это исключение.Этот метод получения в основном создает и возвращает коллекцию пар ключ / значение, которая является агрегацией коллекций QueryString, Form, Cookies и ServerVariables в указанном порядке.Теперь важно то, что когда вы используете этот метод получения, он всегда будет выполнять проверку запроса, и это независимо от того, использовали ли вы атрибут [AllowHtml] для какого-либо свойства модели или если вы украсили действие контроллера атрибутом [ValidateInput(false)] и отключили все входные данныеvalidation.

Так что на самом деле это не ошибка в атрибуте AllowHtml.Именно так создается свойство Params.

Как упомянул @Adam в своем ответе, вам следует избегать ручного доступа к значениям запроса.Вам следует использовать поставщиков значений, которые принимают во внимание такие вещи, как отключенная проверка запросов для некоторых полей.

Поэтому просто добавьте другое свойство в модель представления:

public class ArticleModel: BaseModel
{
    [StringLength(8000, ErrorMessage = "Long description must be in 8000 characters or less")]
    [AllowHtml]
    public string LongDescription { get; set; }

    public string Button { get; set; }
}

и затем в действие контроллера:

[HttpPost]
public ActionResult AddEdit(ArticleModel model)
{
    string buttonName = model.Button;
    if (buttonName == "Cancel")
    {
        return RedirectToAction("Index");
    }

    // something failed
    if (!ModelState.IsValid)
    {

    }

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