С# MVC4 Сохранить HTML в Textarea - Ошибка проверки

У меня есть форма создания страницы, используя класс Page

Класс:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using System.Globalization;
using SpringHealthOne.SpringWS;
using System.Configuration;
using System.ComponentModel.DataAnnotations.Schema;

namespace SpringHealthOne.Models
{
 public class Page 
 {
 public int PageID { get; set; }
 [Required]
 public string Title { get; set; }

 [NotMapped]
 public MvcHtmlString PageBody { get; set; }

 public string Body
 {
 get { return PageBody.ToHtmlString(); }
 set { PageBody = new MvcHtmlString(value); }
 }

 public string MetaTitle { get; set; }
 public string MetaDescription { get; set; }
 public string Keywords { get; set; }
 public bool Published { get; set; }
 }
}

Сама форма достаточно проста, она включает в себя текстовое поле с добавлением Ckeditor. При попытке сохранить поле изначально я получал небезопасные входные ошибки (HTML), поэтому я добавил [ValidateInput(false)] в метод:

[ValidateInput(false)]
[HttpPost]
public ActionResult Edit(Page page)
 {
 if (ModelState.IsValid)
 {
 db.Entry(page).State = EntityState.Modified;
 db.SaveChanges();
 return RedirectToAction("Index");
 }
 return View(page);
 }

Я больше не получаю исключение, но ModelState.IsValid всегда имеет значение false, и я получаю ошибку:

The value '' is invalid.

Может кто-то указать мне верное направление? Im очень новый для С# и тем более MVC4

1 ответ

Я думаю, что AllowHtmlAttribute - это то, что вы ищете. Вы можете использовать его следующим образом:

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

Это позволяет использовать HTML-разметку в строке, поскольку она пропускает проверку модели для этого свойства. Вам не нужен атрибут ValidateInput. Я не думаю, что это хорошо использовать в любом случае, поскольку он пропускает проверку для всей модели, это может также привести к ModelState.IsValid свойство ModelState.IsValid будет false поскольку вы пропустили проверку. Также см. Эту статью.

licensed under cc by-sa 3.0 with attribution.