C # MVC2 Клиентский боковой вид формы Vavelation с XVal, предотвратить пост
-
27-09-2019 - |
Вопрос
я использую 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>
Решение
Может быть, это может помочь:
Как использовать плагин Validation jQuery с метаданными, формами jQuery и XVal вместе?
Другие советы
Моя первая и главная забота здесь будет: почему ваше приложение сохраняет значения в базе данных в первую очередь? В то время как 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.
Почему у вас есть атрибут диапазона? С свойствами, которые вы указали, пока все введено в текстовое поле, он должен пройти проверку на стороне клиента.