Отключить проверку на стороне клиента для некоторых полей в ASP.NET MVC - PullRequest
1 голос
/ 21 марта 2011

Как можно условно отключить проверку некоторых полей на стороне клиента?

Вот пример того, что мне нужно сделать:

  • пользователь пишет имя и адрес и отправляет.
  • Оба проверяются как на стороне сервера, так и на стороне клиента.Если проверка прошла успешно, электронное письмо отправляется на указанный адрес и сохраняется пара (имя, адрес).
  • в качестве ответа отображается та же страница (я не хочу перенаправлять!) На этот раз с подтверждением.Пользователь может повторно ввести свое имя и отправить.В этом случае электронная почта будет пересылаться по адресу, соответствующему данному имени.

Это не работает, потому что: проверка на стороне клиента не пройдет, когда пользователь нажимает кнопку повторной отправки на втором (экран подтверждения)).Было бы сказано, что требуется электронная почта, даже если для нее нет поля.Как отключить проверку почты по электронной почте до того, как страница подтверждения будет отправлена ​​пользователю?

Пример страницы ASP.NET MVC

<%if (Model.Confirm == false){ %>
    <% using (Html.BeginForm()) { %>
        Your email: <%: Html.EditorFor(m => m.Email) %>
        Your name: <%: Html.EditorFor(m => m.Name) %>
        <input type="submit" value="Send Email" />
    <% } %>
<%} else{ %>
    The e-mail was send! You can write your name and click button to resend it.
    <% using (Html.BeginForm()) { %>
        Your name: <%: Html.EditorFor(m => m.Name) %>
        <input type="submit" value="Resend me email again" />
    <% } %>
<% } %>

В модели требуются Email и Nameполе для принудительной проверки на стороне клиента.

Пример действий контроллера

 public ActionResult Index(){
     return new MyModel {Confirm = false;}
 }

 [HttpPost]
 public ActionResult Index(MyModel model){
     if(DataHelper.isKnown(model.Name)){
         //send e-mail to the address corresponding to name in database 
     }
     if(!ModelState.IsValid) {
         return View(model);
     }
     //Send e-mail to address in email
     //store pair name->email to database
     model.Confirm = true;
     return View(model);
 }

Ответы [ 4 ]

2 голосов
/ 21 марта 2011

Это простое решение, я скрою поле электронной почты для второго подтверждения и сохраню его значение.

<%} else{ %>
    The e-mail was send! You can write your name and click button to resend it.
    <% using (Html.BeginForm()) { %>
        <%: Html.HiddenFor(m => m.Email) %>
        Your name: <%: Html.EditorFor(m => m.Name) %>
        <input type="submit" value="Resend me email again" />
    <% } %>
<% } %>
1 голос
/ 21 марта 2011

Когда атрибут «disabled» добавлен к элементу, его можно исключить из проверки на стороне клиента.

Отключение проверки на стороне клиента для отключенных элементов управления вводом в ASP.NET MVC -Блог Имрана Балоча

1 голос
/ 21 марта 2011

Почему бы вам не использовать 2 разных вида? Вам не нужно перенаправлять. Я думаю, что вы нарушаете SRP здесь. Это представление служит более чем одной цели.

public ActionResult SubmitEmail(Model model)
{
     if(!emailWasSent)
        return View("FirstView");
     else
        return View("ConfirmationView");
}

Таким образом, первое представление может иметь проверку на стороне клиента, а второе представление не может выбрать его и делать, как пожелает.

1 голос
/ 21 марта 2011

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

РЕДАКТИРОВАТЬ: Если бы я хотел сделать ручную проверку на стороне клиента, я бы использовал jQuery, так как это так просто в таких задачах.

...