asp.net - 如何将 IsValid 合并到非 ASP.NET(标准 html)方法按钮中

标签 asp.net

我知道按钮等 ASP.NET 控件具有回发事件模型。并检查 page.IsValid 是否依赖于事件和回发以便启动验证。

但是如果我的 .aspx 中有一个使用常规 HTML 的按钮(我不想使用 asp.net 按钮...请不要问我为什么)但仍然想利用调用 Page .是否有效?

例如,假设我的 .aspx 页面有 2 个按钮:

<asp:ImageButton runat="server" ID="cmdPlaceOrder" OnClick="cmdPlaceOrder_Click" ImageUrl="images/someButton.gif" />

它就在页面中,不久前有人创建了它。在 cmdPlaceOrder 中,我们检查 Page.IsValid:

protected void cmdPlaceOrder_Click(object sender, EventArgs args)
{

    if (!IsValid)
        return;
    ... rest of logic
}

这是标准的。现在,如果我在 .aspx 页面中添加一个像这样的非 ASP.NET 按钮,用于下订单(但对于与上面现有的下订单按钮分开的不同类型的订单):

<a href="<%=SomeUrl() %>"><img src="images/buttonPayGoogleCheckout.gif" alt="Pay with Google"/></a>

因此,单击超链接后,页面将回发到自身(相同的 url)。我检查了查询字符串参数标志的 url,如果设置调用下面我创建的方法,这基本上与上面的方法类似,但其中有一些不同的逻辑:

protected void PlaceGoogleCheckoutOrder()
{

    if (!IsValid)
        return;
    ... rest of logic here, but I can't get to it because there is no event model to allow IsValid to work
}

显然我没有将事件模型绑定(bind)到此,因此一旦它命中 Page.IsValid 检查,它就会在运行时出错并显示以下消息:

Page.IsValid cannot be called before validation has taken place. It should be queried in the event handler for a control that has CausesValidation=True and initiated the postback, or after a call to Page.Validate.

但我仍然希望能够调用此验证,即已在我们的 .aspx 中设置的验证。我不想在这方面重新发明轮子,在这种情况下我不想使用基于 ASP.NET 的按钮(不要问我为什么,我有我的理由,而且太长了)。

我想知道如何使用 .我不确定如何连接一个事件,以便在重定向后仍然连接并允许该代码仍然有效。

我尝试添加 Page.Validate();在检查 Page.IsValid 之前在我的 PlaceGoogleCheckoutOrder() 方法中,但我仍然遇到相同的错误。

在查看 MSDN 上的 Page.Validate() ( http://msdn.microsoft.com/en-us/library/0ke7bxeh.aspx ) 后,它指出“验证组由将页面发布到服务器的控件确定。如果未指定验证组,则没有验证组用过。”

这就是为什么什么都没有发生的原因。所以我不确定在这种情况下如何让 ASP.NET 了解将页面发布到服务器以便使用验证组的控件(在本例中为 my )。我想我可以在我的...中添加一个 runat="server",但怀疑我需要在这里做的就是这些。

最佳答案

普通按钮的诀窍在于它永远不会回发,因为您的 href 属性在那里有一些其他的 url。如果您想检查页面是否有效,您必须先回发到您的页面类以进行检查,然后从那里重定向。

要使普通 anchor (<a >) 标记发生这种情况,您可以做的是在 javascript 中处理 anchor 的 onclick 事件,执行您想要的任何客户端工作,然后调用 __doPostBack() javascript函数。

您可以在此处查看有关如何在 msdn 上调用 __doPostBack() 的示例:
http://msdn.microsoft.com/en-us/library/aa720099(VS.71).aspx
它来自 .Net 1.1,但仍然准确。

关于asp.net - 如何将 IsValid 合并到非 ASP.NET(标准 html)方法按钮中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2208123/

相关文章:

jquery - WebMethod 返回 JSON,但我的 $.ajax() 回调中的响应 obj 只是一个字符串

c# - 如何从 ASP .NET Core 中创建 Azure AD 用户?

asp.net - asp.net 捆绑如何在内部工作

c# - 单击提交按钮后保持对话框(?)打开

asp.net - 使用 JavaScript 进行 XML 解析

javascript - qq罚款 uploader 多个文件无法上传

javascript - 如何通过JQuery JSON数据获取Check Box(@Html.CheckBox)的值

c# - 如何从发布在同一 EC2 服务器上的 ASP.NET 网站访问 EC2 服务器上的 SQL Server 2012?

c# - WCF 和 Web API 的区别总结

c# - 页面重定向而不改变 URL-Umbraco | C#