Клиентская C# mvc2 проверка формы с xval, предотвратите сообщение

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

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

[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
}

Мое представление похоже ниже:

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

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

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

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

Править: 19-го апреля я просто узнал, что существует нормальная кнопка с тем, чтобы быть используемым вместо входного типа = "Кнопка", это могло быть проблемой?


5
задан Rob 22 April 2010 в 12:57
поделиться

3 ответа

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

0
ответ дан 14 December 2019 в 19:07
поделиться

В первую очередь меня беспокоит вопрос: почему ваше приложение в первую очередь сохраняет значения в базе данных? Хотя xVal - это хороший способ сделать приложение удобным для пользователя, вы все равно ДОЛЖНЫ выполнять проверку на стороне сервера. Если вы не проверяете свои данные на сервере - у вас большая дыра в безопасности! Попробуйте проверить, есть ли в вашем контроллере ModelState.IsValid, прежде чем сохранять значения.

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

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

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

, поэтому решение здесь будет следующим:

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

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

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

Также я составил рабочее решение, которое содержит рабочее решение. Список, редактирование, создание страницы, строковые и целочисленные свойства, а также проверка 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

2
ответ дан 14 December 2019 в 19:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: