在@Html.TextBoxFor.Net中禁用验证

在@Html.TextBoxFor.Net中禁用验证,.net,asp.net-mvc,asp.net-mvc-3,.net,Asp.net Mvc,Asp.net Mvc 3,我正在使用ASP.NETMVC3。我有一个名为Student的实体,它的属性Id、名称、年龄和编号。在Student的创建页面中,我使用了验证框架。但在高级搜索页面中,我使用了所有属性,但不想使用验证框架,因为用户可能不想使用所有字段进行搜索 我还想提到,我在模型类中使用了[Required]注释 请帮助我克服这个问题 问候 Molay您不能在运行时删除属性。学生实体必须有多个视图模型,一个用于创建,另一个用于搜索。听起来学生类的值受到了限制(应该是这样的) 我会考虑使用单独的视图模型来搜索,而

我正在使用ASP.NETMVC3。我有一个名为Student的实体,它的属性Id、名称、年龄和编号。在Student的创建页面中,我使用了验证框架。但在高级搜索页面中,我使用了所有属性,但不想使用验证框架,因为用户可能不想使用所有字段进行搜索

我还想提到,我在模型类中使用了[Required]注释

请帮助我克服这个问题

问候
Molay

您不能在运行时删除属性。学生实体必须有多个视图模型,一个用于创建,另一个用于搜索。

听起来学生类的值受到了限制(应该是这样的)

我会考虑使用单独的视图模型来搜索,而不是使用学生。

public class Student
{
    [ValidationAttributeOfSomeKind]
    int Age { get; set; }

    [ValidationAttributeOfSomeKind]
    string Name { get; set; }
}

public class StudentSearch
{
    int? Age { get; set; }

    string Name { get; set; }
}

我认为你必须编写自己的文本框助手。没有办法禁用此功能。

我同意xixonia的观点,使用单独的视图模型进行搜索,但要回答您的问题,您有几个选项客户端:

  • 作为HTML属性传入
    data val=“false”
    ,例如:
    @HTML.TextBoxFor(x=>x.Age,new{data\u val=“false”})
  • 改用
    @Html.TextBox()
  • 使用相同的输入名称用HTML手动创建文本框,使其绑定到模型

  • 如果您在后端执行验证(应该是!),即检查
    ModelState.IsValid
    ,则必须从ModelState中删除验证属性,如下所示:
    ModelState.remove(“年龄”)

    在表单上添加此代码:

    @Html.EnableClientValidation(false);
    

    是否改用
    Html.TextBox
    ?你将失去其他的好处,<代码>文本BOXX/<代码>带来,但它们并不难硬编码。当你感觉到这一点时,你会考虑为这个搜索页面或任何其他自定义页面考虑VIEW模型。毕竟,ViewModels始终是一种最佳实践。我没有想过要这么做!:)