2016-05-02 4 views
-1

Я использую MVC с первой моделью. Я использовал [ValidateInput(false)] на моем контроллере, который принимает богатый ввод текста. Это отлично работает. Теперь я нашел следующее сообщение, которое позволяет мне использовать [AllowHtml], который я бы предпочел (post).AllowHtml не работает с первой моделью

[MetadataType(typeof(YourEntityMetadata))] 
public partial class YourEntityClass 
{    
} 

public class YourEntityMetadata 
{ 
    [AllowHtml] 
    public string YourPropertyWithHtml { get; set; } 
} 

Я пробовал это, но это не сработало. По причинам тестирования я добавил AllowHtml непосредственно в собственность в автогенерированной модели, которая также не работала. В обоих случаях я получил ту же ошибку «Потенциально опасный запрос ...»

Этот вопрос представляет собой простой богатый текст <p> lorem <\p> от CKEditor. Контроллер вызывает отдельную функцию, которая выполняет фактическую запись для доступа к базе данных, а также доступ к первой модели ModelContainer.

Есть что-то в автогенерации, которая может помешать работе [AllowHtml]. Это проблема в том, что контроллер не имеет прямого доступа или создания объекта, но передает строку другой функции, которая создает объект и сохраняет его в базе данных?

EDIT

Я отключил фильтры, которые проверяют для маркеров XSRF. У меня есть набор режимов проверки запроса:

<httpRuntime targetFramework="4.6.1" requestValidationMode="2.0" /> 

Я урезанная метод контроллера для:

public int SaveBlock(string blockCont) 
{ 
    var testt = new ViewTest() { BlockContent = blockCont }; 
    return 0; 
} 

с простой вид модели:

public class ViewTest 
{ 
    [AllowHtml] 
    public string BlockContent { get; set; } 
} 

и до сих пор запрос отмечен «потенциально опасная» ошибка.

+1

'[AllowHtml]' будет работать нормально, если применить его к правильному свойству. –

+0

Вы не должны помещать что-либо в автоматически генерируемый код класса. Infact вам действительно не нужно это свойство в классе сущности. Вы должны создать модель представления для передачи данных из вашего представления в метод действия и применить этот атрибут к соответствующему свойству. – Shyju

+0

Взгляните на [этот ответ] (http://stackoverflow.com/a/4866070/6268935) и [этот ответ] (http://stackoverflow.com/a/82170/6268935). – Arman

ответ

0

Я читал немного больше о проблеме с полезными комментариями. Моя путаница заключалась в том, что я думал, что аннотации данных применяются, когда данные записываются в модель не тогда, когда она принимается в методе контроллера.

Так что, конечно, мой подход к отправке строки на контроллер и надеяться, что она будет проверена, когда я действительно напишу ее в модель, была неправильной. Возможно, я хотел слишком много.

Для моего подхода, в котором я хочу как можно больше выделить модели данных из контроллера (используя репозиторий), я предполагаю, что единственным способом продвижения будет модель представления ввода, отправленного контроллеру. Однако, в моем случае, я полагаю, что я буду придерживаться кодирования нескольких вводов не-html-строк, чтобы пропускать только один html-вход в базу данных.