我正在使用ASP.NET 3.5.我有一个用户必须添加项目的列表框(我已经为此编写了代码).我的要求是必须至少将一个项目添加到列表框中,否则他们无法提交表单.我在页面上有几个其他验证器,它们都写入ValidationSummary控件.我希望这个列表框验证也可以写入Validation Summary控件.任何帮助是极大的赞赏.谢谢.
嗨我正在使用自定义表单字段验证器,似乎自定义验证器正在工作,不允许它继续到下一页,但它不更新验证摘要也不显示星号和标签,我已经变得可见了.我还在同一个字段上有其他验证器,如RequiredFieldValidator.设置了我的ValidationGroup,Text和IsValid也是如此.我甚至在javascript中编写并设置了一个虚拟客户端验证方法,正如一些解决方法所暗示的那样.
这是asp.net中的验证摘要代码
<asp:ValidationSummary ID="ValidatorSummary" runat="server" ValidationGroup="Step2" />
Run Code Online (Sandbox Code Playgroud)
这是自定义验证器和必填字段
<asp:CustomValidator ID="AddressVerification" runat="server" ErrorMessage="Please enter a valid address." Display="Dynamic" ValidationGroup="Step2" OnServerValidate="AddressVerification_ServerValidate" ClientValidationFunction="CustomValidatorDummy" Text="*" Enabled="true" EnableClientScript="true"></asp:CustomValidator>
<asp:RequiredFieldValidator ID="RFValidatorHomeAddress" runat="server" ErrorMessage="Please enter home address." Text="*" Display="Dynamic" ValidationGroup="Step2" ControlToValidate="txtHomeAddress"></asp:RequiredFieldValidator>
Run Code Online (Sandbox Code Playgroud)
这是后面代码中的自定义验证方法
protected void AddressVerification_ServerValidate(object sender, ServerValidateEventArgs e)
{
//lets just say it doesn't validate and sets the IsValid to false
lblUspsValidatorResHomeCity.Visible = true;
lblUspsValidatorResHomeState.Visible = true;
lblUspsValidatorResHomeZip.Visible = true;
e.IsValid = false;
}
Run Code Online (Sandbox Code Playgroud)
请指教,谢谢.
编辑:回答 - 按照bitxwise提到.验证摘要也应放在更新面板中.谢谢!
像这样:
<asp:UpdatePanel ID="UpdatePanelValidationSummaryHome" ChildrenAsTriggers="false" UpdateMode="Conditional"
runat="server">
<ContentTemplate>
<asp:ValidationSummary ID="AddressHomeValidationSummary" …Run Code Online (Sandbox Code Playgroud) 我有几种情况需要创建:
1)如果下拉列表具有特定值,则将特定文本框设为必填字段。
2)如果某个特定的文本框包含数据,则使另一个文本框成为必需(如果填写了地址字段,则需要城市,州和邮政编码)
我有从看起来正确的一对CustomValidators调用的代码:
<asp:CustomValidator ID="cvtxt_pat_id" runat="server"
OnServerValidate="txt_pat_idValidate" ControlToValidate="txt_pat_id"
ErrorMessage="Text must be 8 or more characters." Display="Dynamic"/>
protected void txt_pat_idValidate(object sender, ServerValidateEventArgs e)
{
if (ddl_addl_pat_info.SelectedValue.ToString() == "2")
{
e.IsValid = (e.Value.Length > 1);
}
else
{
e.IsValid = true;
}
}
<asp:CustomValidator ID="cvtxt_pat_id" runat="server"
OnServerValidate="addresspartsValidate" ControlToValidate="txt_city"
ErrorMessage="Complete address must be entered." Display="Dynamic"/>
protected void addresspartsValidate(object sender, ServerValidateEventArgs e)
{
if (txt_pat_address.Text.Length > 1)
{
e.IsValid = (e.Value.Length > 1);
}
else
{
e.IsValid = true;
}
}
Run Code Online (Sandbox Code Playgroud)
但是据我了解,如果我正在测试的文本框为空,则该框永远不会验证,因此如果它们为空,则不会触发,这使得很难检查必填字段。那么...有什么想法吗?
另外,关于我是否需要同时拥有测试的客户端版本和服务器版本,我的说法相互矛盾。也许在旧版本中是必需的,现在不是吗?
我有几个列(ip,provider_id),我希望值的组合始终是唯一的.因此,我正在尝试构建自定义验证功能.但我有问题抓住二级领域的价值.这是我目前在模型中的代码:
public $validate = array(
'ip' => array(
'rule' => array('uniqueClick', 'provider_id'),
'message' => 'The click is not unique.'
)
);
public function uniqueClick ($ip, $field) {
$count = $this->find('count', array('conditions' => array('ip' => $ip, 'provider_id' => $field)));
// echo $field;
return $count == 0;
}
Run Code Online (Sandbox Code Playgroud)
所以问题是当我测试加载到$ field中的值时,它只是'provider_id',一个字符串.我希望它包含'provider_id'字段的值.有没有人知道如何获取该值(以及必要时的所有其他辅助模型字段值)并将其发送到自定义验证函数?
我在CookBook上的阅读和那些讨论类似问题的人似乎认为这个解决方案可行,但不幸的是不适合我.
提前致谢!
我有一个CustomValidator控件,在OnServerValidate事件中我想设置正在验证的控件的属性.
您可能会认为已验证的控件对象在OnServerValidate事件中可用,但事实并非如此.然后我尝试执行FindControl但似乎无法访问ControlToValidate值.
有人请帮我验证TextBox控件,以便我可以从OnServerValidate事件修改其属性吗?
感谢:D
我有一个要求,要求自定义验证器.用户希望验证字段旁边有一个红色星号.星号应始终显示 - 表示该字段是必需的(取决于选中/取消选中的复选框).验证摘要中显示的错误消息相当长.我使用了星号的标签,因为控件位于.ascx用户控件中,该控件在多个页面上使用,有时星号应显示,有时则不应显示.因为我不希望错误消息显示在字段旁边而我不想要两个星号,所以我尝试不设置自定义验证器的Text属性.但是,这会导致错误消息显示文本显示的位置.我也尝试通过代码将text属性设置为String.Empty,但也没有用.我在SO,Google或MSDN上找不到任何内容.
我想出的唯一解决方案是将text属性设置为星号,并将forecolor设置为白色,从而有效地使其不可见.
如果没有这种解决方法,有没有办法完成我想做的事情?
提前致谢!
我正在尝试为属性编写一个通用的自定义验证器,使其通用我需要在闭包内对字段名称的引用,代码如下在config.groovy
grails.gorm.default.constraints = {
nameShared(validator: {val, obj, errors->
Pattern p = Pattern.compile("[a-zA-Z0-9-]{1,15}")
Matcher m = p.matcher(val)
boolean b = m.matches()
if(!b)
errors.rejectValue('name', "${obj.class}.name.invalid", "Name is invalid")
})
Run Code Online (Sandbox Code Playgroud)
在我的域类中
class Student{
String name
static constraints = {
name(shared:'nameShared')
}
}
class Teacher{
String firstName
String lastName
static constraints = {
firstName(shared:'nameShared')
}
}
Run Code Online (Sandbox Code Playgroud)
我想对name和firstName使用相同的验证器,但由于我在验证器中对fieldName进行硬编码,它将始终用于name而不是firstName,所以我想知道是否有任何方式我可以获得对fieldname并使验证器通用,请帮助
我试图使用依赖注入自定义验证器,以便能够使用entityManager.
我按照Symfony示例:依赖注入,但我总是收到此错误消息:
FatalErrorException:错误:在/home/milos/workspace/merrin3/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Validator/ConstraintValidatorFactory.php第68行中找不到类'isdoi'
这是我的课程:
1. IsDOI课程:
<?php
namespace Merrin\MainBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class IsDOI extends Constraint
{
public $message_publisher_DOI = 'The Publisher DOI abbreviation does not correspond to the DOI you filled in !';
public $message_journal_DOI = 'No journal found with the DOI you filled in !';
public $journal;
public $doiAbbreviation;
public function validatedBy() {
return "isdoi";
}
public function getTargets()
{
return self::CLASS_CONSTRAINT;
}
}
Run Code Online (Sandbox Code Playgroud)
2. IsDOIValidator类:
<?php
namespace Merrin\MainBundle\Validator\Constraints;
use Doctrine\ORM\EntityManager;
use Symfony\Component\Validator\Constraint; …Run Code Online (Sandbox Code Playgroud) 我们的想法是让用户POST表单.并触发API返回的错误,如果用户已经注册,则将电子邮件字段设置为错误.
我使用FormBuilder的反应形式,我尝试在订阅错误捕获器中调用验证器:
构造函数:
this.email = fb.control('', [Validators.required, Validators.pattern(/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/), SignupComponent.alreadyExist()]);
this.username = fb.control('', [Validators.required, Validators.pattern(/^([A-ZÀ-ÿa-z0-9]{2,})+(?:[ _-][A-ZÀ-ÿa-z0-9]+)*$/)]);
this.userRegisterForm = fb.group({
email: this.email,
username: this.username
});
Run Code Online (Sandbox Code Playgroud)
自定义alreadyExist()验证器:
static alreadyExist(alreadyExist: boolean = false): any {
return (control: FormControl): { [s: string]: boolean } => {
if(alreadyExist) {
return { emailAlreadyExist: true }
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
onSubmit():
this.user.create(newUser)
.subscribe(
data => {
this.router.navigate(['signin']);
},
error => {
if(error.status === 401) {
// CALL THE VALIDATOR HERE TO SET : FALSE
SignupComponent.alreadyExist(true);
}
this.loading = …Run Code Online (Sandbox Code Playgroud) 我试着向我们求助
Html.ValidationMessageFor(m=>m.MyProperty,"The field is very much required");
但是..我的使用不引人注意我的验证,但由于某种原因,似乎一旦我使用customValidationMessage参数,该属性的不引人注意的验证"中断".
或者用更简单的术语表示......无论是否输入值,都会始终显示验证消息.它根本不会更新/切换.
该属性也用于RadioButtonFor ..所以完整的"代码"是:
@Html.RadioButtonFor(m=>m.Myproperty,"Value 1")
@Html.RadioButtonFor(m=>m.Myproperty,"Value 2")
@Html.ValidationMessageFor(m=>m.MyProperty,"Please select ine of the options")
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
asp.net-mvc message customvalidator radiobuttonfor unobtrusive-validation
customvalidator ×10
validation ×5
asp.net ×3
c# ×3
.net ×1
angular ×1
asp.net-mvc ×1
cakephp ×1
cakephp-2.0 ×1
formbuilder ×1
global ×1
grails ×1
listbox ×1
message ×1
php ×1
shared ×1
symfony ×1
typescript ×1
unique ×1