代码之家  ›  专栏  ›  技术社区  ›  jhunter

ASP.NET页上的表单标记

  •  5
  • jhunter  · 技术社区  · 16 年前

    我有一个Web应用程序,它有一个从数据库加载内容的页面。我希望能够在动态内容中放置表单,但是.NET不允许内部表单执行它的操作。有没有一种方法可以允许这种方式或其他方式在动态内容页上获取表单?

    谢谢。

    --编辑——

    我想我需要澄清一些事情。这是一个从数据库加载内容的ASPX页。据我所知,我从数据库中提取并粘贴在标签中的文本从未被.NET wp编译或处理过,因此我无法使用后面的代码来解决此问题。

    8 回复  |  直到 10 年前
        1
  •  4
  •   Joe Phillips    16 年前

    页面上只能有一个表单(ASP表单);您必须以某种方式使用该表单。

    为了澄清,只能处理一个表单。

        2
  •  5
  •   JerSchneid    16 年前

    这是一个常见的问题,当你想对第三方站点有一个非回发表单时(比如PayPal按钮)。

    出现此问题的原因是HTML不允许您在窗体中使用窗体,并且大多数ASP.NET页都具有 <form runat="server" /> HTML(或母版页)中的“向上”。

    我最喜欢的解决方案是隐藏“high-up”表单标记,同时仍然显示所有内容。然后你可以随意地把你想要的标签放在身体里。如果动态执行此操作,则可以逐页选择哪些页面具有自定义表单。

    我创建了一个名为ghostform.cs的类来处理这个问题。您可以在这里阅读所有相关信息:

    http://jerschneid.blogspot.com/2007/03/hide-form-tag-but-leave-content.html

        3
  •  1
  •   tghw megawac    16 年前

    不适用于WebForms,不适用。您必须使用连接到 Button LinkButton . 幸运的是,很容易做到:

    ASPX:

    ...
    <asp:TextBox id="txtFoo" runat="server" />
    <asp:Button id="btnFoo" runat="server" onclick="btnFoo_Click />
    ...
    

    FAC.ASPX.CS:

    ...
    protected void btnFoo_Click(object sender, EventArgs e)
    {
        string s = txtFoo.Text;
        // do something with s
    }
    ...
    
        4
  •  1
  •   Josh    16 年前

    Dino Esposito有一篇来自msdn杂志的文章,内容涉及在ASP.NET中处理多个窗体或“模拟”子窗体,这些子窗体可能只回答您的所有问题。

    http://msdn.microsoft.com/en-us/magazine/cc164151.aspx

        5
  •  0
  •   Pharabus    16 年前

    你要么通过在你想成为“子表单”提交按钮的地方添加一个服务器端的点击事件处理程序来处理回发(这就是web forms处理同一页面上多个提交类型buutons的方式),要么如果你不想回发完整的回发,就用ajax来处理回发。

        6
  •  0
  •   Aaron    16 年前

    我以前遇到过这个问题。我所做的一个解决方法是将我希望在ASP:面板内部执行操作的代码放置在该面板上。通过该面板,您可以将“defaultbutton”属性设置为面板内部的按钮,单击该按钮(或按“回车”)将触发该按钮的单击事件。当我有一个包含唯一允许的asp:form的母版页时,我发现通过按Enter提交“表单”非常方便。

    希望这有帮助。

        7
  •  0
  •   Trey Paschal    12 年前

    周围的任何工作都会很糟糕,很难看。按设计,ASP.NET使用表单标记来发布和获取数据。这就是他们称之为Web表单应用程序的原因。HTML不允许嵌套表单。您要做的是在代码隐藏中使用WebRequest。

    如果你尝试一些像贝宝按钮,你可以简单地使用这样的东西。

    Markup:

    <div id="PayPalButtonContainer" runat="server"></div>
    

    代码落后:

        public static string GetPayPalButtonMarkup()
        {
            const string markup = @"https://www.paypal.com/cgi-bin/webscr
                                      ?cmd=_xclick&business={0}
                                      &item_name=Widget
                                      &amount={1}
                                      &currency_code=USD";
            return markup;
        }
    
        PayPalButtonContainer.InnerHtml = string.format(GetPayPalButtonMarkup,"YOUR PAYPAL USER NAME", "YOUR PRICE VALUE");
    
        8
  •  0
  •   Zeddy    10 年前

    当我第一次遇到这个问题时,我发现对我来说最简单的解决方案是简单地复制和粘贴母版页,并给它一个稍微不同的名称,比如:

    SiteNameMasterPage      'Default page with FORM tag
    SiteNameMasterPageNF    'No Form tag
    

    然后,根据我是否需要表单标签,只需更改内容页面顶部的母版页链接,如下所示

    <%@ Page Title="" Language="VB" MasterPageFile="~/SiteName.master" %>
    <%@ MasterType VirtualPath="~/SiteName.master" %>
    <!-- This masterpage has the default FORM tag -->
    

    <%@ Page Title="" Language="VB" MasterPageFile="~/SiteNameNF.master" %>
    <%@ MasterType VirtualPath="~/SiteNameNF.master" %>
    <!-- This masterpage does NOT have the default FORM tag -->
    

    然后在内容页中,无论我想在哪里放置表单,我都可以包括 <form> 标签

    推荐文章