English 中文(简体)
扩展伙伴关系。 NET 有效工具
原标题:Extending ASP.NET validators

我想扩大信标,使我能够使一名有效者依赖另一人。 我的情况是,我们必须在一个文本箱中确定一个日期。 通常,我只使用需要配备的外勤人员(以确保提供日期)、比较仪(确保日期是日期)和最后一台测地仪(确保日期在规定时限内)。

问题在于,有效器并不互相依赖,因此,如果我们真的想要每个有效器看到所有三条电文是最为相关的信息,即如果它们在文本箱中输入“abc”,那么就不宜向他们表明该日期不是有效范围的信息(尽管在技术上我假定情况确实如此)。

目前,为了提供这种功能,我们使用一个海关验证器,在服务器内将所有三个验证都验证了事件记录器,并根据验证失败的情况,从方案上改变错误信息。

我愿将这一比喻标准化,因为在这个申请中,情况就是如此。 如果我能够使有效者相互依赖,从而解决问题,并且使我们能够利用客户的验证,而不是进行退却,特别是处理习俗验证。

想法是,如果“主人”有效,则一名有效人依赖另一人,则如果主人无效,则该名有效人将进行正常的验证(EvaluateIsalid())。

我提出了以下解决办法,继承了框架中已经提供的各种验证人控制。

public class RequiredFieldDependentValidator : RequiredFieldValidator
{
    [Description("The validation control to depend on for determining if validation should occur")]
    public string ValidationControlToDependOn
    {
        get
        {
            object obj = ViewState["ValidationControlToDependOn"];
            if (obj != null) return (string) obj;
            return null;
        }
        set
        {
            Control control = FindControl(value);
            if (control is IValidator)
                ViewState["ValidationControlToDependOn"] = value;
            else
                throw new HttpException("ValidationControlToDependOn is not a validation control");
        }
    }

    protected override bool EvaluateIsValid()
    {
        IValidator validationControlToDependOn = FindControl(ValidationControlToDependOn) as IValidator;

        if(validationControlToDependOn != null)
        {
            return !validationControlToDependOn.IsValid || base.EvaluateIsValid();
        }

        return base.EvaluateIsValid();
    }

目前,我刚刚将其编号为所需外勤人员,理想的是,我要为所有有效人员提供这一功能,但我看不出这样做的方法,而不必将上述代码复制为每一类有效操作员的类似类别。

是否有办法,我可以“集中”这一法典,并且很容易在有效器中使用,而不必从零纸上书写整个有效器,这样我就可以改变其继承的类别。

Cheers,

最佳回答

您不妨研究一个网络。

基本上允许你凌驾于某些网络控制方法之上(如果需要,某些浏览器可以调用,但这里可以是所有人)。

在你的情况下,如果控制对父母有效者有任何依赖,你就希望凌驾于评估方法之上,并进行检查。

举例来说,我们最近创立了一种案文Box改编器,使控制具有最大程度的属性。

Public Class TextBoxAdapter
        Inherits WebControlAdapter

        Private ReadOnly Property TextBoxControl() As TextBox
            Get
                Return DirectCast(MyBase.Control, TextBox)
            End Get
        End Property

        Protected Overrides Sub RenderBeginTag(ByVal writer As System.Web.UI.HtmlTextWriter)
            If TextBoxControl.TextMode = TextBoxMode.MultiLine AndAlso TextBoxControl.MaxLength > 0 Then
                writer.AddAttribute("maxlength", TextBoxControl.MaxLength.ToString)
            End If

            MyBase.RenderBeginTag(writer)
        End Sub
    End Class

为了加以利用,在您的《申请》目录中仅创建一种浏览器文档,并在其中设立适应者:

<browsers>
    <browser refID="Default">
        <controlAdapters>
            <adapter controlType="System.Web.UI.WebControls.TextBox"
               adapterType="TextBoxAdapter" />
        </controlAdapters>
    </browser>
</browsers>

在你看来,唯一的复杂情况是,如何储存依赖的鉴定人,以便评估者能够查阅这一名录。 您可考虑像“Onof”建议或其他观点/Cookie/其他储存机制这样的非接受控制。

问题回答

你可以在你的网页基数上超越定点方法。 在你能够控制下页添加确认依赖信息:

<my:ValidationDependency TargetControl="RegExp1" Dependency="Required1" />

您可以有<代码>ValidationControlTodependOn截至类型清单中的财产,并将有效人员列入清单。 因此,我们可以假定,后来添加的验证人取决于此前添加的验证人。

页: 1

页: 1

foreach(IValidator validator in ValidationControlToDependOn)
{
return !validator.IsValid;

}

我看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Transaction handling with TransactionScope

I am implementing Transaction using TransactionScope with the help this MSDN article http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx I just want to confirm that is ...

System.Web.Mvc.Controller Initialize

i have the following base controller... public class BaseController : Controller { protected override void Initialize(System.Web.Routing.RequestContext requestContext) { if (...

Microsoft.Contracts namespace

For what it is necessary Microsoft.Contracts namespace in asp.net? I mean, in what cases I could write using Microsoft.Contracts;?

Separator line in ASP.NET

I d like to add a simple separator line in an aspx web form. Does anyone know how? It sounds easy enough, but still I can t manage to find how to do it.. 10x!

热门标签