我使用 XVAL 使用客户端验证在我的asp.net MVC2 Web的应用程序。尽管当我在一个数字字段中输入文本它给了错误,它仍然会尝试的形式张贴到数据库。不正确的值被替换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") %>

我希望有人能帮助我这个问题,先谢谢了!

编辑:4月19日 我刚发现不存在与所使用的,而不是输入类型=“按钮”难道这是问题一个普通按钮?

<button class="save" type="submit" name="save"><span>Opslaan</span></button>
有帮助吗?

其他提示

我在这里的第一和主要关心的是:为什么您的应用程序保存值数据库摆在首位?虽然XVAL是一个很好的方法,使应用程序的用户友好,你还要做服务器端验证。如果你不验证服务器上的数据 - 你有一个masive安全漏洞!尝试如果ModelState.IsValid在控制器保存值之前检查。

现在,从我看到你正在使用注册XVAL验证

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

它的工作方式是它使客户端验证用于与“产品”为前缀的所有控制。您的另一方面文本框具有一个ID的 FromPriceInCents

所以这里的解决方案将是这样:

<%= 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

为什么你的Range属性注释掉?随着属性已指定,只要东西是在文本框中应该能顺利通过客户端验证输入。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top