Как удалить проверку на стороне клиента в текстовом поле для нескольких писем?

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

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

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

Вид:

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

Модель:

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

ОБНОВЛЕНИЕ:

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


person C Murphy    schedule 24.09.2018    source источник
comment
Свойство List<string> не имеет смысла для ввода и никогда не будет связываться (вы отправляете обратно одну строку, а не набор строк.   -  person    schedule 25.09.2018
comment
Электронные письма будут частью файла JSON, прикрепленного к связанному билету, который будет частью автоматизированного процесса, в котором они должны быть в форме списка (при условии, что существует более одного электронного письма). Но, учитывая это, должен ли я просто назначить ввод для строки, которая затем будет разделена и назначена свойству списка строк (до сериализации в JSON)?   -  person C Murphy    schedule 25.09.2018


Ответы (4)


Новая скрипка здесь, нажмите на нее 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 = "[email protected] (',' 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);
    }
person kblau    schedule 25.09.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 = "[email protected] (',' 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);
    }
person kblau    schedule 24.09.2018
comment
Спасибо, @kblau, это решает мою проблему с элементами управления вводом. Но означает ли это, что нет возможности иметь его как список для начала? Мне нужны электронные письма в списке, чтобы они были правильно отформатированы, когда я сериализую их в файл json. - person C Murphy; 24.09.2018
comment
@C Мерфи добавляет еще один пост, в котором для свойства используется список - person kblau; 26.09.2018

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

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

});
person China Syndrome    schedule 24.09.2018
comment
Привет, Синдром Китая, я пробовал это, но он все равно не удалит базовую проверку и не позволит мне опубликовать. - person C Murphy; 25.09.2018

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

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

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

person C Murphy    schedule 25.09.2018
comment
Вы понимаете, что удаление этого сценария удалило любую ненавязчивую проверку, добавленную моделью? Если бы вы использовали html.textbox вместо html.textboxfor, помощник HTML не будет ссылаться на модель, чтобы автоматически генерировать валидацию для вас. Похоже, вы только что убили муху фунтом C4. - person Steve0; 26.09.2018
comment
Да, я это понимаю. Я никогда не намеревался использовать бритву MVC, потому что я хотел, чтобы она автоматически генерировала проверку для меня, поэтому я нормально сгенерирую ее вручную. Особенно, если автоматическая проверка не работает должным образом. - person C Murphy; 26.09.2018