Как хранить HTML-код в модели ASP.NET MVC2 - PullRequest
0 голосов
/ 01 декабря 2010

У меня есть модель комментария со строковым свойством, подобным этому:

[Column]
public string Text { get; set; }

Текст комментария может содержать все теги HTML внутри (я знаю, что это плохо, но я должен).Но когда я обновляю объект, MVC 2 экранирует все теги HTML.

Метод обновления:

[HttpPost]
public ActionResult Edit(int ID=0)
{
        Comment comment= ID == 0
            ? new Comment ()
            : commentRepository.Comments.First(x => x.ID == ID);

        TryUpdateModel(comment);

        if (ModelState.IsValid)
        {
            commentRepository.Save(comment);
            return RedirectToAction("View/" + comment.ID);
        }
        else
        {
            return View(comment);
        }
    }

Как мне обновить текст комментария без экранирования?

PS Также явозникают проблемы с типом столбца: когда я переключаю текст столбца в SQL Server Express с varchar на текст , происходит сбой при обновлении модели:

Типы данных текстовые иnvarchar несовместимы в операторе равенства.

Сведения об исключении: System.Data.SqlClient.SqlException: типы данных text и nvarchar несовместимы в операторе равенства.

Ответы [ 3 ]

2 голосов
/ 01 декабря 2010

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

[ValidateInput(false)]

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

[ValidateInput(true, Exclude = "YourFieldName")]

Это исключит ваше поле, но все равно проверит все остальные поля.

ADDON: Добавление фильтров может быть сделано в (AFAIK) двумя способами.Вот 2 образца:

[HttpPost, ValidateInput(true, Exclude = "YourFieldName")]
public ActionResult SomeAction(...) { ... }

[HttpPost]
[ValidateInput(true, Exclude = "YourFieldName")]
publiv ActionResult SomeAction(...) { ... }
2 голосов
/ 01 декабря 2010

вам нужно добавить фильтр ниже на вашем контроллере под фильтр [HttpPost];

[ValidateInput(false)]
1 голос
/ 01 декабря 2010
  • Не используйте тип данных Text в SQL Server, он устарел. Вместо этого используйте Nvarchar (MAX).
  • Чтобы отключить проверку ввода для вашего действия, вы должны использовать атрибут ValidateInput в вашем методе действия. Если вы используете .net 4, вам нужно добавить еще одну строку в ваш web.config:
<configuration>
  <system.web>
      <httpRuntime requestValidationMode="2.0"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...