我有一个表单提交按钮,它连接了asp.net验证器。如果我使用javascript函数将文本更改为处理时单击它不起作用。该按钮标记验证器,并使整个页面回发。这是我的代码:
C#
protected void Page_Load(object sender, EventArgs e)
{
btnPurchase.Attributes["onClick"] = "submit()";
}
HTML
<script type="text/javascript">
function submit() {
document.getElementById("ctl00_ContentPlaceHolder1_btnPurchase").value = "Processing";
};
</script>
如果表单通过验证,我的目标是将按钮文本更改为购买onclick,然后在我后面的代码中,一旦表单回发,它将更改回原始值。
答案 0 :(得分:2)
我遇到了这个100%完美的解决方案。我正在使用脚本管理器和更新面板...
<script type="text/javascript">
// Get a reference to the PageRequestManager.
var prm = Sys.WebForms.PageRequestManager.getInstance();
// Using that prm reference, hook _initializeRequest
// and _endRequest, to run our code at the begin and end
// of any async postbacks that occur.
prm.add_initializeRequest(InitializeRequest);
// Executed anytime an async postback occurs.
function InitializeRequest(sender, args) {
// Get a reference to the element that raised the postback,
// and disables it.
$get(args._postBackElement.id).disabled = true;
$get(args._postBackElement.id).value = "Processing...";
}
// Executed when the async postback completes.
function EndRequest(sender, args) {
// Get a reference to the element that raised the postback
// which is completing, and enable it.
$get(args._postBackElement.id).disabled = false;
$get(args._postBackElement.id).value = "Purchase";
}
</script>
答案 1 :(得分:1)
我刚问了一个非常相似的问题(已经回答): ASP.NET Custom Button Control - How to Override OnClientClick But Preserve Existing Behaviour?
基本上,您需要保留提交按钮(__doPostBack
)的现有行为。您可以使用Page.GetPostBackEventReference(myButton)
执行此操作。
然而,通过验证会更加困难,因此您需要内联页面验证(Page.Validate()
)或创建自定义控件,并覆盖OnClientClick
和PostBackOptions
成员
自定义控件更好,因为我现在可以将此控件放在我想要此行为的任何页面上。
您可以这样做并公开一个公共财产:
public string loadingText {get; set;}
可用于自定义每页上的加载文本。
您基本上需要设置onclick属性来执行以下操作:
onclick = "if (Page_Validate()) this.text = 'Processing';{0} else return false;"
{0}应该是从Page.GetPostBackEventReference中检索的常规回发操作。
结果逻辑将是:点击,验证页面,成功,更改文本和回发,如果失败,返回false - 这将在页面上显示验证。
将按钮设置为HTML中的默认文本“提交”,然后将上述逻辑包装在!Page.IsPostBack中,以便重置表单提交上的文本。
希望有所帮助。