【问题标题】:Web-Form Rendering IssueWeb 表单呈现问题
【发布时间】:2015-10-26 13:41:48
【问题描述】:

我有一个传统的用户控件,我有以下结构:

<asp:Content id="ContentBody" runat="server" ContentPlaceHolderId="MainContent">
    <Core:AccountApplication id="uxAccountApplication" runat="server" />
</asp>

在用户控件里面我有一个传统的:

<form id="AccountForm">
    <input type="text" id="txtCompany" name="Company" />
    <input type="submit" id="btnSubmit" />
</form>

当我调用$('#AccountForm').serialize(); 时出现问题,请求始终为空,没有序列化。如果我这样做 $('form').serialize(); 它会序列化,但它也会抓取所有 Web-Form ViewState 渲染。这需要一些可疑的方法来纠正。

有没有更好的解决方法?

【问题讨论】:

  • 您能否发布您的 ASP 控件的实际 HTML。听起来#AccountForm 选择器不正确。此外,为了避免序列化 ViewState 数据,您需要手动序列化表单。
  • @RoryMcCrossan 这不是一个 asp 控件,它是所有原生 HTML,用户控件中没有 runat="server"
  • &lt;Core:AccountApplication id="uxAccountApplication" runat="server" /&gt; ... ?
  • @RoryMcCrossan 即注册用户控件。
  • 不管怎样,如果没有看到您的 HTML,我们将无法帮助您。

标签: c# jquery asp.net webforms


【解决方案1】:

ASP.NET 中不允许嵌套表单(例如,请参阅this question)。

您的 &lt;form id="AccountForm"&gt; 元素将被 ASP.NET 删除(查看生成的 HTML 以确认这一点)。

【讨论】:

  • 我注意到它被删除了,没有办法吗?
  • @Greg:还没有测试过,但是试试这个:用&lt;div id="AccountForm"&gt;替换form元素并使用$('#AccountForm input').serialize()
  • 在我看到我决定在 jQuery 中使用 wrap() 之后,您对删除的看法是正确的。哪个有效。
【解决方案2】:

在收到表示已删除表单元素的答案后,我进行了验证,整个表单确实已被删除。所以我做了以下事情:

<div class="Application-Container">
     <!-- All my form inputs -->
</div>

将它们包装成一个容器,然后我用jQuery将容器包装成一个表单。

$('.Application-Container').wrap('<form id="AccountForm"></form>');

现在当你提交时,它会重新包装到表单中,然后我可以调用$('#AccountForm').serialize(),它会正确构建我的表单数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多