C# Asp.Net-中继器中的按钮不';当浏览器设置为无javascript时无法工作-帮助!
我在一个相当复杂的中继器中有一个按钮,它必须有C# Asp.Net-中继器中的按钮不';当浏览器设置为无javascript时无法工作-帮助!,c#,asp.net,button,repeater,C#,Asp.net,Button,Repeater,我在一个相当复杂的中继器中有一个按钮,它必须有UseSubmitBehavior=“False”,否则我会得到错误: 回发或回调参数无效。在配置或页面中使用启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合要求,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证 因此,我一直在使用UseSubmitBehavior=“False”,但我发现如果浏览器上禁用J
UseSubmitBehavior=“False”
,否则我会得到错误:
回发或回调参数无效。在配置或页面中使用启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合要求,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证
因此,我一直在使用UseSubmitBehavior=“False”
,但我发现如果浏览器上禁用Javascript,则该按钮不会提交
有什么建议吗
这是中继器的所有标记,所讨论的按钮是btnAddToCart:
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table width="100%">
<tr><td>
</HeaderTemplate>
<FooterTemplate>
</td></tr>
</table>
</FooterTemplate>
<ItemTemplate>
<div style="border-color:Black;border-style:solid;border-width:thin">
<table width="100%">
<tr><td colspan="2">
<div style="border-bottom-width:thin;border-bottom-style:solid;border-bottom-color:gray;background-color:#ffe3a6">
<table width="100%" >
<tr>
<td>
<p class="header" style="text-align:left;">
<a href="<%# GetMoreInfoLink((ProductRecord)Container.DataItem) %>" class="productlink">
<%# ((ProductRecord)Container.DataItem).ItemCode %> : <%# ((ProductRecord)Container.DataItem).Name %>
</a>
</p>
</td>
<td>
<p class="header" style="text-align:right;"><%# string.Format("{0:C}", ((ProductRecord)Container.DataItem).Price)%></p>
</td>
</tr>
</table></div>
</td></tr>
<tr valign="middle">
<td style="text-align:center;padding-left: 5px;">
<a href="<%# GetMoreInfoLink((ProductRecord)Container.DataItem) %>" class="productlink" style="color: #FFFFE2">
<img src='<%# ((ProductRecord)Container.DataItem).Thumb_link %>' alt="" />
</a>
<br />
<a class="main" href="<%# GetMoreInfoLink((ProductRecord)Container.DataItem) %>">More Info</a>
</td>
<td >
<div align="center">
<table width="90%"><tr><td style="text-align:center">
<span style="text-align:justify"><%# ((ProductRecord)Container.DataItem).Short_desc %></span>
</td></tr></table>
</div>
</td>
</tr>
<tr>
<td style="text-align:left">
<asp:Button ID="editButton" runat="server" Text="Edit"
Visible="<%# IsEditButtonVisible() %>"
PostBackUrl="<%# GetEditButtonLink((ProductRecord)Container.DataItem) %>" CausesValidation="False" />
</td>
<td style="text-align:right">
<table align="right" cellspacing="10px"><tr>
<td id="Td1" runat="server" visible="<%# !string.IsNullOrEmpty(((ProductRecord)Container.DataItem).Docs_link) %>">
<a class="main" href="<%# ((ProductRecord)Container.DataItem).Docs_link %>">Documentation</a>
</td>
<%-- <td><a href="">Demo</a></td> --%>
<td>
<asp:Button ID="btnAddToCart" runat="server" Text="Add to cart" UseSubmitBehavior="False"
OnClick="btnAddToCart_Click"
CommandArgument='<%# ((ProductRecord)Container.DataItem).Id %>'
/>
</td>
</tr></table>
</td>
</tr>
</table>
</div>
</ItemTemplate>
<SeparatorTemplate>
</td></tr>
<tr><td>
</SeparatorTemplate>
</asp:Repeater>
.需要JavaScript的按钮类型为按钮,而不需要JavaScript的按钮(在产品详细信息页面上)类型为submit
——后者使用HTML表单的默认提交行为,而前者需要JavaScript启动提交以识别引发回发的控件
正如@Craig所说,这是经过设计的——ASP.NET在像您这样的情况下使用JavaScript进行回发
如果没有JavaScript,您的登录页面按钮和购物车的部分也无法工作,因此如果您真的希望提供无脚本体验,那么这可能是一次比您计划的更大的重新设计。您可以在ASP.NET页面上使用多个HTML表单(无需runat=“server”
),因此您可能需要按照该路线将每个产品拆分为自己的表单,这样您就可以使用默认的HTML表单提交
它可能值得评估您的目标受众,并快速阅读
编辑:这里是一个列表。您可以设置
,但这并不是强烈建议的。这实际上是Asp.Net使用Javascript发回时预期的行为。也许你可以看看创建基本的html提交按钮和管理回发自己?@Craig Well我的按钮在下一个更深层的产品页面上,它不使用转发器,也没有UseSubmitBehavior=false
功能很好。我可能不得不删除它,按照失望先生说的去做,尽管它并不像错误所说的那样被推荐,所以我想避免它。更糟糕的情况是,senario会执行一个
块,并将一条消息放到那里进行添加,但这太糟糕了!感谢Town,就在昨天,有人访问了这个网站,我的主页有一个空白页面,因为没有javascript处理,所以这肯定是一个正在进行的工作来修复所有这些。谢天谢地,他挖得更深,通过查看来源找到了我的支持并报告了它!详细信息页面上的标记完全相同,减去UseSubmitBehavior=false行,因此它一定是Asp.Net通过将其设置为submit类型所做的事情,我必须仔细查看。是的,我注意到登录页面上的注册按钮不起作用,arg!谢谢你指出@查克·萨维奇:如果你没有主页,那么我想不能在购物车上添加东西会成为一个小问题!;)@查克·萨维奇:我的假设是,由于它是产品详细信息页面上的唯一按钮,因此它将采用默认的HTMLinput type=“submit”
,因此在该实例中不需要JavaScript。@谢谢,这是有道理的。昨天我解决了没有主页的问题,今天我正在处理更多的问题。