2015-04-09 13 views
7

Sto usando il plugin summernote casella di testo: http://summernote.org/#/getting-started#basic-apiSummernote e modulo di presentazione in MVC C#

Questa è la forma che ho con 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> 

Ora, a mio controllore, questo è il codice che ho:

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

Ora il problema è che textForLabelLanguage param è sempre nullo.

Questo accade perché devo passare $('#textForLabelLanguage').code(); in MVC quando si invia il modulo ma non ho idea di come farlo!

Come posso risolvere il mio problema?

+0

dov'è l'elemento del modulo che avrà l'html? –

+0

È giusto prima del javascript. Questo è l'HTML usando la generazione di moduli mvc. –

+0

Intendo il campo di inserimento? –

risposta

12

Ho trovato la mia soluzione al problema. Questo è come io sto facendo il controller ottenere le informazioni corrette:

<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> 

In sostanza, se uso una textarea con un nome invece di un ingresso o qualsiasi altra cosa, funziona!

Tuttavia, e deve essere avvertito, anche se questa soluzione funziona, ho quindi ottengo un errore nel controller dicendo:

Un valore potenzialmente pericoloso Request.Form è stato rilevato dal client

Questo accade perché sto permettendo l'HTML. Ma questo è un problema per un'altra domanda!

+0

FYI '[ValidateInput (false)]' consente di passare HTML all'azione di un controller – JoeJoe87577

+2

Ancora meglio: AllowHtml sull'attributo destro –

0

simile a quello che è stato pubblicato in precedenza è possibile utilizzare l'helper HTML @ HTML.TextAreaFor (m => m.text, nuovo {@ id = "textFor modello"}) invece di

3

prega, l'uso [AllowHTML]

C'è un buon articolo su MSDN Request Validation in ASP.NET

"per disattivare la convalida della richiesta per una specifica proprietà, contrassegnare la definizione della proprietà con l'attributo AllowHtml:"

[AllowHtml] 
public string Prop1 { get; set; } 
Problemi correlati