我编写了一个自定义的ASP.net控件,它来自LinkButton并覆盖了Render()方法。我正在使用它来替换我正在处理的网站中的ImageButtons,因此我们不必为每个按钮都有一个图像。
此控件工作正常,所需的回发等,但它不会在其验证组中触发验证器。这显然是一个问题。
控件的代码(浓缩)如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public class CustomButton : LinkButton
{
public string SpanCssClass { get; set; }
protected override void Render(HtmlTextWriter writer)
{
if (!Visible)
{
return;
}
writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);
writer.AddAttribute(HtmlTextWriterAttribute.Id, ClientID);
writer.AddAttribute(HtmlTextWriterAttribute.Class, CssClass);
string postback = string.IsNullOrEmpty(OnClientClick) ? "javascript:__doPostBack('" + UniqueID + "','');" : OnClientClick;
writer.AddAttribute(HtmlTextWriterAttribute.Href, postback);
writer.RenderBeginTag(HtmlTextWriterTag.A);
writer.AddAttribute(HtmlTextWriterAttribute.Class, SpanCssClass);
writer.RenderBeginTag(HtmlTextWriterTag.Span);
writer.Write(Text);
writer.RenderEndTag();
writer.RenderEndTag();
}
}
有谁知道为什么这不会导致验证者开火?
我的印象是,将LinkButton中的所有其他方法保留为未覆盖状态会使所有其他功能保持不变!
答案 0 :(得分:1)
问题是你正在生成自己的脚本,允许asp.net为你做这个,它应该更好。这样的事情会更好。
PostBackOptions options = new PostBackOptions(this);
options.PerformValidation = true;
options.RequiresJavaScriptProtocol = true;
string postback = string.IsNullOrEmpty(OnClientClick) ? this.Page.ClientScript.GetPostBackEventReference(options) : OnClientClick;
答案 1 :(得分:0)
好吧,如果你想在CausesValidation为true时手动触发验证,你可以调用Page_Validate客户端方法来触发验证。我认为验证组需要一个参数来验证......
HTH。