Pergunta

estou a usar xval Para usar a validação do lado do cliente no meu aplicativo Web ASP.NET MVC2. Apesar dos erros que está dando quando digito texto em um campo numérico, ele ainda tenta postar o formulário no banco de dados. Os valores incorretos estão sendo substituídos por 0 e salvos no banco de dados. Mas, em vez disso, nem deve ser possível tentar enviar o formulário. Alguém pode me ajudar aqui?

Eu defini os atributos como abaixo:

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

O controlador pegando a solicitação parece abaixo; Não estou recebendo erros nesta parte.

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

Minha visão parece abaixo:

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

E no final da visão, tenho a seguinte regra que no código HTML gera as regras de validação corretas

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

Espero que alguém possa me ajudar com esse problema, obrigado antecipadamente!

EDIT: 19 de abril, acabei de descobrir que existe um botão normal com ser usado em vez de um tipo de entrada = "botão" poderia ser o problema?

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

Outras dicas

Minha primeira e principal preocupação aqui seria: por que seu aplicativo está salvando os valores no banco de dados em primeiro lugar? Embora o XVAL seja uma boa maneira de tornar o aplicativo amigável, você ainda precisa fazer a validação do lado do servidor. Se você não validar seus dados no servidor - você terá um orifício de segurança de masive! Tente verificar se o ModelState.isvalid no seu controlador antes de salvar os valores.

Agora, pelo que vejo, você está registrando a validação xval usando

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

A maneira como funciona é que permite a validação do lado do cliente para todos os controles prefixados com "Produto". Sua caixa de texto, por outro lado, tem um id de FromPriceIncents

Portanto, a solução aqui seria fazer isso:

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

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

UPD3Eu atualizei a postagem. Corrigido o código para que o prefixo não seja usado.

Além disso, compilei uma solução de trabalho que contém uma solução de trabalho. Liste, edite, crie a página, a string e o INT Propriedades e a validação 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; }
}

E na vista

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

Aqui está o link de download. Confira e diga -me se funcionahttp://www.flexlabs.org/download/xvaltest

Por que você tem o atributo de intervalo comentado? Com as propriedades que você especificou desde que tudo seja inserido na caixa de texto, ele deve passar na validação do lado do cliente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top