如何使用 MVC3 Razor 和 MVC3 Razor 验证 HiddenField不引人注目的 jQuery 验证?

发布于 2024-12-05 18:20:50 字数 1192 浏览 1 评论 0原文

我有一个类似于以下内容的模型

public class TaskModel
{
    public int UserId { get; set; }
    public int CustomerId { get; set; }
    public string CustomerDescription { get; set; }
    /* Snip */
}

如何添加验证以确保在客户端表示 CustomerId 的隐藏字段大于零?

@Html.LabelFor(x => x.CustomerId)
@Html.HiddenFor(x => x.CustomerId)
<label id="customerName" class="description">
    @Model.CustomerName
</label>

只是为了解释上面发生的事情;我使用弹出窗口从列表中选择客户,然后使用该客户的 ID 填充隐藏字段,并将标签描述更新为该 ID 代表的客户。我这样做是为了避免不必要的发布和发布。数据库调用。

我不想必须发布表单数据来确定 ID 是否大于 0。是否有一种简单的方法可以将其作为属性添加到模型并在客户端进行处理?我编写了以下验证属性,但我不知道如何使其在客户端也能顺利工作。

public class ValidIDAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        if (value == null)
        {
            return false;
        }
        else
        {
            if (value.GetType() == typeof(int))
            {
                return (int)value > 0;
            }
            else if (value.GetType() == typeof(Guid))
            {
                return (Guid)value != Guid.Empty;
            }

            return false;
        }
    }
}

I have a Model similar to the following

public class TaskModel
{
    public int UserId { get; set; }
    public int CustomerId { get; set; }
    public string CustomerDescription { get; set; }
    /* Snip */
}

How can I add validation to ensure that, on client-side, a hidden field representing the CustomerId is greater than zero?

@Html.LabelFor(x => x.CustomerId)
@Html.HiddenFor(x => x.CustomerId)
<label id="customerName" class="description">
    @Model.CustomerName
</label>

Just to explain what's going on above; I use a popup to select a customer from a list, which then populates the hidden field with the ID of the customer and updates the label description to the customer that the ID represents. I do it that way to avoiding an unnecessary post & database call.

I don't want to have to post the form data to determine if the ID is greater than 0. Is there an easy way to add this as both an Attribute to the Model and have it handled client side? I've written the following Validation attribute, but I don't know how to make it work seemlessly on the client-end as well.

public class ValidIDAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        if (value == null)
        {
            return false;
        }
        else
        {
            if (value.GetType() == typeof(int))
            {
                return (int)value > 0;
            }
            else if (value.GetType() == typeof(Guid))
            {
                return (Guid)value != Guid.Empty;
            }

            return false;
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

画骨成沙 2024-12-12 18:20:50

您可以使用内置的 Range 属性:

[Range(0, 99999)]
public int UserId { get; set; }

这包括不显眼的客户端验证。

要创建自定义客户端验证器,请参阅本文

You can use the built-in Range attribute:

[Range(0, 99999)]
public int UserId { get; set; }

This includes unobtrusive client-side validation.

To create custom client-side validator, see this article.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文