When you develop an app, sometimes your requirements could be you want to send HTML values (for example <h2>Hello World</h2>) from the view to the controller. Sometimes we use HTML Editors, to save some info into the database. By default ASP.NET MVC doesn't allow a user to submit the HTML content.
So let's see how to submit your form with HTML content.
- Open Visual Studio then select "New Project" then select "ASP.NET MVC 4 Application".
- Provide a project name then click "OK".
- Select "Internet Application" then click "OK"
- Create a New Model.
ValidateModel.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- namespace ValidateInputDemo.Models
- {
- public class ValidateModel
- {
- public string description { get; set; }
- }
- }
- Add a new method to your Controller.
HomeController.cs
- public ActionResult ValidateInput()
- {
- return View();
- }
- [HttpPost]
- public ActionResult ValidateInput(string description)
- {
- ValidateModel validateInputModel = new ValidateModel();
- validateInputModel.description = description;
- return View(validateInputModel);
- }
ValidateInput.cshtml
- @model ValidateInputDemo.Models.ValidateModel
- @{
- ViewBag.Title = "ValidateInput";
- }
- @using (@Html.BeginForm("ValidateInput","Home", FormMethod.Post, new { @id = "form1", @enctype = "multipart/form-data" }))
- {
- <label id="lblDescription">Description</label>
- @Html.TextAreaFor(m=>m.description, new {@id="txtDescription",@name="description" })
- <input type="submit" id="bttn_Submit" />
- }
You can see in the code above, there is a text area and a submit button, have a look in the browser. Press F5.
You can see in the preceding screen, if you type something into the description and press Submit then nothing happens.
Now check the following example. Add HTML content into text area.
Now press the "Submit" button.
You will get the error above. This error comes because this is the security from ASP.NET MVC. For applications, a user cannot send HTML values to the controller, but sometimes we want to send values to the controller.
For resolving this issue we have the ValidateInput(false) attribute.
Just put this into your controller and have a look.
- [HttpPost]
- [ValidateInput(false)]
- public ActionResult ValidateInput(string description)
- {
- ValidateModel validateInputModel = new ValidateModel();
- validateInputModel.description = description;
- return View(validateInputModel);
- }
Now press F5. After filling in the HTML attribute press the submit button, you will never get an error. So when you want to work with HTML attributes in your app text area or textboxes, don't forget to use validateinpute(false) in your ActionMethod.