C # MVC2 Клиентский боковой вид формы Vavelation с XVal, предотвратить пост

StackOverflow https://stackoverflow.com/questions/2652658

Вопрос

я использую 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
}

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

<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") %>

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

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

<button class="save" type="submit" name="save"><span>Opslaan</span></button>
Это было полезно?

Другие советы

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

Теперь, от того, что я вижу, вы регистрируете проверку XVAL, используя

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

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

Так что решение здесь будет делать это:

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top