2015-04-09 9 views
7

używam pluginu summernote dla pola tekstowego: http://summernote.org/#/getting-started#basic-apizłożenie Summernote i forma w MVC C#

Jest to forma Mam użyciu summmernote:

<div class="modal-body" style="max-height: 600px"> 
    @using (Html.BeginForm()) 
    { 
     @Html.ValidationSummary(true) 
     <fieldset class="form-horizontal"> 
      <div id="textForLabelLanguage"></div> 
      <button type="submit" class="btn btn-primary">Save changes</button> 
      @Html.ActionLink("Cancel", "Index", null, new { @class = "btn " }) 
     </fieldset> 
    } 
</div> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#textForLabelLanguage').summernote(); 
    }); 
</script> 

Teraz, w moim kontrolera, to jest kod mam:

public ActionResult Create(UserInfo newInfo , [Bind(Prefix = "textForLabelLanguage")] string textForLabelLanguage) 
{ 
    //logic here 
} 

teraz problemem jest to, że textForLabelLanguage param jest zawsze zerowa.

Dzieje się tak, ponieważ muszę przekazać $('#textForLabelLanguage').code(); do MVC podczas przesyłania formularza, ale nie mam pojęcia, jak to zrobić!

Jak mogę rozwiązać mój problem?

+0

gdzie jest twój element formularza, który będzie miał HTML? –

+0

To jest tuż przed javascript. To jest HTML używający generowania formularzy mvc. –

+0

Mam na myśli pole wejściowe? –

Odpowiedz

12

Znalazłem moje rozwiązanie problemu. W ten sposób robię kontroler uzyskać prawidłowe informacje:

<div class="modal-body" style="max-height: 600px"> 
    @using (Html.BeginForm()) 
    { 
     @Html.ValidationSummary(true) 
     <fieldset class="form-horizontal"> 
      <textarea name="textForLabelLanguage" id="textForLabelLanguage" /> 
      <button type="submit" class="btn btn-primary">Save changes</button> 
      @Html.ActionLink("Cancel", "Index", null, new { @class = "btn " }) 
     </fieldset> 
    } 
</div> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#textForLabelLanguage').summernote(); 
    }); 
</script> 

Zasadniczo, jeśli mogę użyć textarea z nazwy zamiast wejścia lub cokolwiek innego, to działa!

Jednak i ostrzegamy, choć to rozwiązanie działa, to wtedy pojawia się błąd w sterowniku mówiąc:

Potencjalnie niebezpieczne wartość Request.Form wykryto od klienta

Dzieje się ponieważ zezwalam na HTML. Ale to jest problem na kolejne pytanie!

+0

FYI '[ValidateInput (false)]' pozwala HTML przekazać do działania kontrolera – JoeJoe87577

+2

Jeszcze lepiej: AllowHtml na prawym atrybucie –

0

podobny do tego, co pisał wcześniej można użyć pomocnika HTML @ HTML.TextAreaFor (m => m.text, new {@id = "textFor model"}) zamiast

3

Proszę użytku [AllowHTML]

Istnieje dobry artykuł na MSDN Request Validation in ASP.NET

„aby wyłączyć sprawdzanie poprawności żądań dla konkretnej nieruchomości, zaznaczyć definicję działce z atrybutem AllowHtml:”

[AllowHtml] 
public string Prop1 { get; set; } 
Powiązane problemy