AllowHtml не работает для сайта ASP.Net Mvc 3

Мы пытаемся использовать украшение [AllowHtml] в одном из наших свойств ViewModel, чтобы избежать YSOD:

От клиента было обнаружено потенциально опасное значение Request.Form (RequestText ="<br>").

когда мы пытаемся отправить HTML-текст, например:<br>, Затем мы хотим использовать Server.HtmlEncode в действии контроллера для предотвращения атак, но когда мы украшаем свойство с помощью[AllowHtml] это не имеет никакого влияния, и если мы попытаемся использовать[ValidateInput(false)] на действие контроллера это тоже не влияет. Мы увиделиStackOverflow Post говоря, что в MVC 3 RC2, что вы должны добавить:

ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider (); на глобальный .asax

Мы тоже это попробовали, хотя мы используем релизную версию MVC 3, а не RC2, но это тоже не дало результата. Кто-нибудь знает, как это исправить?

Модель:

namespace UI.Models.ViewModel
{
    public class CustomerRequestSupport
    {
        /// <summary>
        /// Gets or Sets the textual description entered by the Customer for 
        /// the support requested.
        /// </summary>
        [AllowHtml]
        public string RequestText { get; set; }
    }
}

контроллер:

    [HttpPost]
    [TabsActionFilter]
    public ActionResult RequestSupport(CustomerRequestSupport collection)
    {
        if (ModelState.IsValid)
        {

            Ticket ticket = new Ticket();

            ticket.Requestor = LoggedInCustomer;

            ticket.Summary = "General Support Ticket";
            ticket.Notes = Server.HtmlEncode(collection.RequestText);

            var errors = _ticketService.SubmitTicket(ticket);

            if (errors.Any())
            {
                ModelState.AddModelError("collection",
                    String.Format("An error has occurred in your Request for Support: " +
                    "{0} Please try again later or call the help desk " +
                    "for immediate assistance.",
                    errors.Aggregate((acc, st) => acc + " " + st)));
            }
            else
            {
                TempData["FlashMessage"] = String.Format("Your request for support has been " +
                        "submitted, the Ticket Number is: {0}.", ticket.TicketNumber);

                return AutoMapView<CustomerDetails>(View("Details", base.LoggedInCustomer));
            }
        }

        //needed for tabs to show
        ViewData.CustomerContactSet(base.LoggedInCustomer);

        return View();

Посмотреть:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"     Inherits="System.Web.Mvc.ViewPage<UI.Models.ViewModel.CustomerRequestSupport>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
 Request Support
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="PageTitle" runat="server">
 Request Support
</asp:Content>

<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm())
   { %>
    <%= Html.ValidationSummary() %>
    <h2>Enter a description of the support needed</h2>
    <%: Html.TextAreaFor( m => m.RequestText, 4, 90, null) %>
    <input type="submit" value="Submit" />
<% } %>
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="JavaScriptContent" runat="server">
</asp:Content>

Ответы на вопрос(2)

Ваш ответ на вопрос