asp.net-mvchtml-helperemail-validationhtml.textboxfor

How to Remove Client-Side Validation on a textboxfor for multiple emails?


I am creating an MVC application in which I will have an input field for a list of emails. In order to do so, I added multiple in order to allow for the user to enter a comma separated list of emails. By doing it this way, I'm able to have input controls to check for the email(s) to be properly formatted (".+@gmail.com").

The problem is that when I test this, it automatically adds class="input-validation-error" (even if I set the @class="" prior) and will not allow me to post due to an invalid input, as a result. Is there any way to allow for this, or is my only option to make it an Email string property and parse it by commas into the EmailList property in the controller?

(Here is my code):

View:

@Html.TextBoxFor(model => model.EmailList, new { type = "email", placeholder 
= "ex@gmail.com (',' Delimited)", title = "Make sure your email(s) are 
formatted appropriately (and comma separated).", multiple = "" })    

Model:

public List<string> EmailList { get; set; }    

UPDATE:

I should also add that I am performing json serialization on post, so It needs to be in the form of a list. Ideally, I would be able to use the multiple for the input of type email tag, since it would allow for the necessary input controls that I would need without making me take it as a string and writing it to a list.


Solution

  • The new fiddle is here, click on it https://dotnetfiddle.net/ORYDVJ

    View

    @model Testy20161006.Controllers.MurphyModel
    @{
        Layout = null;
    }
    <!DOCTYPE html>
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Tut122</title>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
        <script type="text/javascript">
            $(function () {
                $("#emailField").change(function () {
                    var theList = {
                        emaillist: []
                    };
                    var array = $('#emailField').val().split(",");
                    $.each(array, function (i) {
                        theList.emaillist.push(
                            array[i]
                        );
                    });
                    $.ajax({
                        url: '/Home/Tut122',
                        traditional: true,
                        type: "POST",
                        contentType: "application/json",
                        data: JSON.stringify({ murphyModel: theList }),
                        success: function (data) {
                            console.log('success!!');
                            $("#theOutput").html(data)
                        }
                    });
                })
            })
        </script>
    </head>
    <body>
        @Html.TextBoxFor(model => model.EmailList, new
                {
                    id = "emailField",
                    type = "email",
                    placeholder = "ex@gmail.com (',' Delimited)",
                    title = "Make sure your email(s) are formatted appropriately (and comma separated).",
                    multiple = ""
                })
        <span>The output data:</span>
        <div id="theOutput">
        </div>
    </body>
    </html>
    

    Controller/View Model

    public class MurphyModel
    {
        public List<string> EmailList { get; set; }
    }
    
    public class HomeController : Controller
    {
        [HttpPost]
        public string Tut122(MurphyModel murphyModel)
        {
            //You need to get Newtonsoft.JSON
            var json = JsonConvert.SerializeObject(murphyModel);
            return json;
        }
    
        public ActionResult Tut122()
        {
            MurphyModel model = new MurphyModel();
            return View(model);
        }