Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Summernote and form submission in MVC c#

I am using the summernote plugin for text box: http://summernote.org/#/getting-started#basic-api

This is the form I have using 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>

Now, In my controller, this is the code I have:

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

Now the problem is that textForLabelLanguage param is always null.

This happens because I have to pass $('#textForLabelLanguage').code(); into MVC when submiting the form but I have no idea how to do that!

How do I solve my problem?

like image 275
Flame_Phoenix Avatar asked Apr 09 '15 13:04

Flame_Phoenix


People also ask

How do I use Summernote plugins?

Adding a Plugin We typically load the Plugin Script after loading the Summernote Script. Most scripts are added in the head area of the typical HTML page. Other things that may need to be loaded along with the plugin file, might be language files, which should follow the plugin inclusion.


2 Answers

I found my solution to the problem. This is how I am making the controller get the correct information:

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

Basically, if I use a textarea with a name instead of an input or anything else, it works!

However, and be warned, even though this solution works, I then get a error in the controller saying:

A potentially dangerous Request.Form value was detected from the client

This happens because I am allowing HTML. But this is a problem for another question!

like image 176
Flame_Phoenix Avatar answered Sep 29 '22 12:09

Flame_Phoenix


Please, use [AllowHTML]

There's a good article on MSDN Request Validation in ASP.NET

"To disable request validation for a specific property, mark the property definition with the AllowHtml attribute:"

[AllowHtml]
public string Prop1 { get;  set; }
like image 44
Marlon Dias Avatar answered Sep 29 '22 13:09

Marlon Dias