Атрибут AllowHtml не работает - PullRequest
4 голосов
/ 01 февраля 2011

У меня есть модель с этим свойством:

     [AllowHtml]
     [DisplayName("Widget for Table")]
     [StringLength(1000, ErrorMessage = "Maximum chars 1000")]
     [DataType(DataType.Html)]
     public object TableWidget { get; set; }

А вот методы создания в контроллере:

  //
  // GET: /Admin/Table/Create

  public ActionResult Create(int id)
  {
     Season season = _seasonRepository.GetSeason(id);

     var table = new Table
                     {
                        SeasonId = season.SeasonId
                     };
     return View(table);
  }

  //
  // POST: /Admin/Table/Create

  [HttpPost]
  public ActionResult Create(Table a)
  {
     if (ModelState.IsValid)
     {
        _tableRepository.Add(a);
        _tableRepository.Save();
        return RedirectToAction("Details", "Season", new { id = a.SeasonId });
     }
     return View();
  }

И последнее вот мое мнение:

@model Stridh.Data.Models.Table
@using (Html.BeginForm())
{
   @Html.ValidationSummary(true)
   <fieldset>
      <legend>Fields</legend>
      <div class="editor-label">
         @Html.LabelFor(model => model.Name)
      </div>
      <div class="editor-field">
         @Html.EditorFor(model => model.Name) @Html.ValidationMessageFor(model => model.Name)
      </div>
      <div class="editor-label">
         @Html.LabelFor(model => model.TableURL)
      </div>
      <div class="editor-field">
         @Html.EditorFor(model => model.TableURL) @Html.ValidationMessageFor(model => model.TableURL)
      </div>
      <div class="editor-label">
         @Html.LabelFor(model => model.SortOrder)
      </div>
      <div class="editor-field">
         @Html.EditorFor(model => model.SortOrder) @Html.ValidationMessageFor(model => model.SortOrder)
      </div>
      <div class="editor-label">
         @Html.LabelFor(model => model.TableWidget)
      </div>
      <div class="editor-field">
         @Html.EditorFor(model => model.TableWidget) @Html.ValidationMessageFor(model => model.TableWidget)
      </div>
      <div class="editor-label invisible">
         @Html.LabelFor(model => model.SeasonId)
      </div>
      <div class="editor-field invisible">
         @Html.EditorFor(model => model.SeasonId)
      </div>
      <p>
         <input type="submit" value="Create" />
      </p>
   </fieldset>
} 

Когда я добавляю «обычное» сообщение без html, все сохраняется ОК, но при сохранении выдает потенциально опасный запрос. Форма ...

Другая странная вещь заключается в том, что я заставил этот [AllowHtml] работать в другом классе моделей. Я не могу найти, почему это вызывает у меня проблемы. Нужна ваша помощь. : -)

Ответы [ 4 ]

16 голосов
/ 01 февраля 2011

Способ использования AllowHtml должен работать.Убедитесь, что вы не обращаетесь к коллекции HttpRequest.Form где-либо еще в вашем коде (контроллере, фильтре и т. Д.), Так как это вызовет проверку запросов ASP.NET и возникшую ошибку.Если вы хотите получить доступ к этой переменной, вам следует обратиться к ней с помощью следующего кода.

using System.Web.Helpers;

HttpRequestBase request = ..  // the request object
request.Unvalidated().Form;
4 голосов
/ 28 июня 2011

Я получаю ту же проблему и решаю ее с помощью этого поста .

Если вы используете .net 4.0, убедитесь, что вы добавили это в web.config

<httpRuntime requestValidationMode="2.0" />

Внутри <system.web> тегов

3 голосов
/ 16 ноября 2015

У меня была такая же проблема. Мой класс модели называется «GeneralContent» и имеет свойство «Content». В моем методе действия я использовал такой атрибут:

публичное обновление ActionResult (содержимое GeneralContent)

когда я переименовал аргумент содержимого в cnt, все работает хорошо. Я думаю, что MVC смущен, когда некоторый атрибут класса модели имеет то же имя, что и аргумент в методе действия.

1 голос
/ 14 апреля 2011

У меня тоже была эта проблема.Я не смог получить свойство модели, помеченное [AllowHtml], чтобы фактически разрешить HTML, и вместо этого обнаружил ту же ошибку, которую вы описали.Мое решение в итоге заключалось в том, чтобы пометить действие Controller, которое принимает опубликованную модель, с атрибутом [ValidateInput(false)].

...