如何在ASP.Net Webforms中执行回发操作

时间:2016-04-07 12:08:02

标签: asp.net

点击<div id="roomTypeContainer">时,我想执行回发以获取数据 所以,将它包裹在LinkButton内。当我点击div时,浏览器控制台出错。

  

未捕获的TypeError:theForm.submit不是函数

转发器位于用户控件

ASCX:

<asp:Repeater ID="rpRoomTypes" runat="server" ItemType="Sitecore.Data.Items.Item"
 OnItemDataBound="rpRoomTypes_ItemDataBound" OnItemCommand="rpRoomTypes_ItemCommand">
   <ItemTemplate>
     <sc:EditFrame ID="efRoomType" runat="server" >
      <asp:LinkButton ID="lnkRoomType" runat="server" CommandName="cmd_RoomType">
       <div id="roomTypeContainer" runat="server">
          ..some html
       </div> 
      </asp:LinkButton>
    </sc:EditFrame>
  </ItemTemplate> 
</asp:Repeater>

更新 当我单击浏览器控制台中的错误链接时,此代码将显示在控制台中:

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['mainform'];
if (!theForm) {
    theForm = document.mainform;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit(); //error here
    }
}
</script>

以上代码似乎是由Sitecore生成的。 mainform是aspx页面中表单的id。

在控制台中运行相同的脚本,这是结果 enter image description here

6 个答案:

答案 0 :(得分:1)

在生成的JS中查看这一行:

var theForm = document.forms['mainform'];

theForm是一个在页面加载时设置的全局变量,但是我想知道表单元素是否还没有在那时创建(或者在脚本块之后 - 这也会导致问题)。然后,当函数在doPostback中运行时,theForm.submit函数将不存在,因为即使表单现在存在,引用它的变量仍然为null。

在控制台中,只需键入theForm并按Enter键(不在控制台中指定)并查看其设置内容。如果它是null / undefined,那就是正在发生的事情,在这种情况下需要更多的信息来诊断失败(例如,为什么表单尚未创建)。

答案 1 :(得分:0)

使用name =“mainform”而不是id =“mainform” document.forms ['something']使用name,但不是id

答案 2 :(得分:0)

"Submit is not a function" error in JavaScript

  

&#34;提交不是一个功能&#34;意味着您命名了提交按钮或   其他一些元素提交。将按钮重命名为btnSubmit和您的   电话会神奇地工作。

     

当您将按钮命名为submit时,您将覆盖submit()函数   形式。

确保没有名称=&#34;提交&#34;或id =&#34;提交&#34;在表格中。

答案 3 :(得分:0)

您可以显示转发器生成的浏览器HTML代码吗?我怀疑您的UserControl sc:EditFrame生成iframe,而您的LinkBut​​ton在加载到此iframe(不包含表单)的文档的上下文中工作。

答案 4 :(得分:0)

form.onSubmit是提交事件的事件侦听器,如果在执行期间未设置处理程序,则form.onsubmit()将引发错误。

答案 5 :(得分:0)

您的用例非常模糊。你为什么要把一个div放在一个LinkBut​​ton中,那也是在一个转发器中?它甚至可以点击吗?您是否在点击div时发出了警告?

另请发布rpRoomTypes_ItemDataBound和rpRoomTypes_ItemCommand方法。