2010-04-16 1 views
5

Я использую xval, чтобы использовать проверку на стороне клиента в моем веб-приложении asp.net mvc2. Несмотря на ошибки, которые он дает при вводе текста в числовое поле, он по-прежнему пытается отправить форму в базу данных. Неверные значения заменяются на 0 и сохраняются в базе данных. Но вместо этого не стоит пытаться представить форму. Может кто-нибудь помочь мне здесь?C# mvc2 проверка на стороне клиента с помощью xval, предотвратить сообщение

Я установил атрибуты, как показано ниже:

[Property] 
[ShowColumnInCrud(true, label = "FromPriceInCents")] 
[Required] 
//[Range(1, Int32.MaxValue)] 
public virtual Int32 FromPriceInCents{ get; set; } 

Контроллер ловли запрос выглядит, как показано ниже; Я не получаю ошибок в этой части.

[AcceptVerbs(HttpVerbs.Post)] 
[Transaction] 
[ValidateInput(false)] 
public override ActionResult Create() 
{ 
    //some foo happens 
} 

Мой взгляд выглядит, как показано ниже:

<div class="label"><label for="Price">FromPrice</label></div> 
<div class="field"> 
<%= Html.TextBox("FromPriceInCents")%> 
<%= Html.ValidationMessage("product.FromPriceInCents")%></div> 

И в конце представления у меня есть следующее правило, которое в HTML код генерирует правильные правила проверки

<%= Html.ClientSideValidation<Product>("Product") %> 

Я надеюсь, кто-то может помочь мне с этой проблемой, спасибо заранее!

EDIT: 19 апреля Я только что узнал, что есть обычная кнопка с использованием вместо типа ввода = «Кнопка». Может ли это быть проблемой?

<button class="save" type="submit" name="save"><span>Opslaan</span></button> 
+1

Почему ваш ValidationMessage ("product.FromPriceInCents"), но ваше текстовое поле использует "FromPriceInCents"? Это кажется подозрительным. Есть ли причина, по которой вы не используете сильно типизированных помощников? ValidationMessageFor (x => x.FromPriceInCents) – Jab

+0

Я изменил текстовые поля и validationmessages на строго типизированные помощники. Но это изменение не влияет на валидацию, тем не менее хороший отзыв! – Rob

ответ

3
+0

Это был толчок, который мне нужен в правильном направлении! Функция проверки jquery сделала трюк. Форма была загружена с помощью jquery и после отправки проверки была неправильно обработана – Rob

0

Почему у вас атрибут Range прокомментирован? С указанными вами свойствами, если в текстовом поле ничего не введено, он должен пройти проверку на стороне клиента.

+0

Атрибут range - это тест. Но я постараюсь вернуть его и посмотреть, что произойдет. – Rob

+0

OK Я попробовал, проверка на стороне клиента дает эту ошибку; Пожалуйста, введите значение от 1 до 2147483647. Но в firebug я вижу, что страница все еще пытается сделать обратную передачу, но возвращает ошибку ниже; 'Ссылка на объект не установлена ​​в экземпляр объекта.' – Rob

+0

Попробуйте иметь свое Создать действие принять тип объекта, как этот общественного ActionResult Создать (ObjectType newObject) – MHinton

2

Моя первая и главная проблема здесь: почему ваше приложение сохраняет значения в базе данных в первую очередь? Хотя xVal - хороший способ сделать приложение дружественным к пользователю, вы все равно должны выполнить проверку на стороне сервера. Если вы не подтвердите свои данные на сервере - у вас есть отверстие для безопасности в маске! Перед сохранением значений попробуйте проверить, есть ли ModelState.IsValid в контроллере.

Теперь от того, что я вижу, что вы регистрации проверки xVal с помощью

<%= Html.ClientSideValidation<Product>("Product") %> 

То, как это работает, это позволяет проверки на стороне клиента для всех элементов управления с префиксом «Продукт». Ваше текстовое поле с другой стороны, имеет идентификатор FromPriceInCents

Таким образом, решение здесь было бы это сделать:

<%= Html.TextBox("FromPriceInCents")%> 
<%= Html.ValidationMessage("FromPriceInCents")%> 

<%= Html.ClientSideValidation<Product>() %> 

UPD3 Я обновил пост. Исправлен код, чтобы префикс не использовался.

Кроме того, я составил рабочее решение, которое содержит рабочее решение. Список, Изменить, Создать страницу, свойства string и int и проверку правильности xVal.

public class Product 
{ 
    [ScaffoldColumn(false)] 
    public int Id { get; set; } 

    [Required] 
    [Range(1,50)] 
    public int PriceInCents { get; set; } 

    [Required] 
    [StringLength(50)] 
    public string Name { get; set; } 
} 

и на представлении

<%= Html.TextBoxFor(model => model.PriceInCents) %> 
<%= Html.ValidationMessageFor(model => model.PriceInCents) %> 

Вот ссылка для скачивания ..Проверьте это и скажите мне, если он работает http://www.flexlabs.org/download/xValTest

+0

Спасибо за хороший ответ, я попробую ваше решение и дам вам знать. Вы правы в отношении проверки на стороне сервера, мне действительно все равно нужно это исправить. – Rob

+0

Я попробовал ваше решение, добавив префикс в текстовое поле. Но тогда проверка не работает вообще. Когда я использую его так: <% = Html.TextBox ("FromPriceInCents")%> <% = Html.ValidationMessage ("product.FromPriceInCents")%> <% = Html.ClientSideValidation ("Продукт")%> Валидация показывает мне ошибки при вводе текста в поле ожидания ожидающих чисел. Но когда я пытаюсь отправить страницу, она все равно делает обратную передачу, чего я не ожидаю и не хочу этого делать. Проверка правильности работы с сервером теперь с Modelstate.IsValid – Rob

+0

Ах да, это потому, что метод Create не мог выставить значения из значений формы. Я обновил сообщение с помощью примера –

 Смежные вопросы

  • Нет связанных вопросов^_^