С# 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.