Как удалить проверку на стороне клиента в текстовом поле для нескольких электронных писем? - PullRequest
0 голосов
/ 24 сентября 2018

Я создаю приложение MVC, в котором у меня будет поле ввода для списка электронных писем.Чтобы сделать это, я добавил несколько, чтобы позволить пользователю вводить список электронных писем через запятую.Делая это таким образом, я могу иметь элементы управления вводом для проверки правильности форматирования сообщений электронной почты (". + @ Gmail.com").

Проблема в том, что когда я проверяю это, он автоматически добавляет class = "input-validation-error" (даже если я установил @ class = "" предыдущее) и не позволяет мне публиковать сообщения из-заневерный ввод, в результате.Есть ли способ разрешить это, или я единственный вариант сделать его строковым свойством Email и проанализировать его запятыми в свойстве EmailList в контроллере?

(Вот мой код):

Вид:

@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 = "" })    

Модель:

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

ОБНОВЛЕНИЕ:

Я должен также добавить, что я выполняю сериализацию json для поста, поэтому он должен быть в форме списка.В идеале я мог бы использовать множественное число для ввода тега типа email, поскольку это позволило бы получить необходимые мне элементы управления вводом, не заставляя меня воспринимать его как строку и записывать в список.

Ответы [ 4 ]

0 голосов
/ 26 сентября 2018

Новая скрипка здесь, нажмите на нее https://dotnetfiddle.net/ORYDVJ

Просмотр

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

Контроллер / Просмотр модели

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);
    }
0 голосов
/ 24 сентября 2018

добавить файл js, надеюсь, вы используете jQuery

$(document).ready(function () {
    $("#EmailList").removeClass("input-validation-error");

});
0 голосов
/ 25 сентября 2018

Просмотрев ответ Кблау, я понял, что это отчасти является причиной.Другая проблема, с которой я столкнулся (когда MVC переступал через любую из моих введенных вручную проверок на стороне клиента), была результатом ненавязчивой проверки:

<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>    

После комментирования это позволило мнечтобы входные данные записывали в строку Email, которую я бы затем назначил списку строк EmailList в контроллере.Это сработало для меня.

0 голосов
/ 24 сентября 2018

https://dotnetfiddle.net/eadTjh

Просмотр

@model Testy20161006.Controllers.MurphyModel
@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Tut122</title>
</head>
<body>
    @if (ViewBag.Output != null)
    {
        <span>@ViewBag.Output</span>
    }
    @using (Html.BeginForm())
    {
        @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 = ""
        })
        <input type="submit" value="submit" />
    }
</body>
</html>

Контроллер / Просмотр Модель

namespace Testy20161006.Controllers
{
public class MurphyModel
{
    //We don't want a list class, rather a string 
    public string EmailList { get; set; }
}

public class HomeController : Controller
{
    [HttpPost]
    public ActionResult Tut122(MurphyModel model)
    {
        var splitEmails = model.EmailList.Split(',');
        var anEmail = "These are the different emails: ";
        foreach (string email in splitEmails)
        {
            //set breakpoint here
            anEmail+= email + " and ";
        }
        anEmail = anEmail.Substring(0, anEmail.Length - 5);
        ViewBag.Output = anEmail;
        return View(model);        }

    public ActionResult Tut122()
    {
        MurphyModel model = new MurphyModel();
        return View(model);
    }
...