代码之家  ›  专栏  ›  技术社区  ›  Eduardo Mello

ASP.NET Web窗体上的jQuery Ajax加载窗体

  •  0
  • Eduardo Mello  · 技术社区  · 15 年前

    我正在使用$.Load()a.aspx页加载父.aspx的一个分区,比如说。加载内容时,将在代码中的aspnetform内放置一个新表单。我以前做过类似的工作,但这次提交按钮是将新表单提交到Ajax加载的页面,而不是aspnetform父页面。

    编辑: 更多细节

    当用户从列表中选择一组项目时,Ajax会像这样加载它们:

    $("#gvContacts").load("MailingContacts.aspx?ids="+$("#filters").val() + "&removedContacts=" + $("#removedContacts").val() + "&action=<%=Convert.ToInt16(this.Action) %>", function());
    

    mailingcontacts是一个包含GridView的ASPX Web窗体。当.load将HTML放到DIV上时,它的运行方式如下:

    <form id="form1" action="MailingContacts.aspx?ids=11&amp;removedContacts=&amp;action=2" method="post" name="form1">
    <!-- GridView code -->
    
    </form>
    

    出于某种原因,提交页面的按钮使用的是这个新表单,而不是原来的aspnetform。

    3 回复  |  直到 13 年前
        1
  •  4
  •   Zhaph - Ben Duguid    15 年前

    不允许使用嵌套表单-如果添加新的 <form> 主父窗体内的标签将使您陷入痛苦的世界。

    基本上,通过在客户机端创建嵌套表单,可以绕过服务器端对此的验证。我想您的提交按钮将使用它在页面上找到的最后一个表单操作,而不是“父”操作。

    您应该:

    1. 将javascript创建的表单加载到 <div> 在主ASP.NET窗体控件之外(允许一页上有多个窗体,但不允许嵌套)。
    2. 以这样一种方式构建主表单:它可以处理mailingcontacts的表单内容,并从中删除表单标记。
    3. 与其返回整个HTML页面(包括Ajax上的GridView),不如返回用户详细信息的集合,并使用jquery等将其呈现到列表中——发送的数据比发送所有HTML所需的数据多得多。
        2
  •  0
  •   Nick Craver    15 年前

    这是因为 action property 在表单标记中设置的值告诉它在何处提交…在ASP.NET中,这个默认值是页面的URL。

    例如,我当前项目输出的表单如下:

    <form name="aspnetForm" method="post" action="/Admin/Report/497" id="aspnetForm" />
    
        3
  •  0
  •   bgmCoder    13 年前

    如何在ASP.NET表单标记中的表单标记“嵌套”中添加ixQuick搜索框,并完成提交功能。

    药膏!我也有类似的问题。我在包含ASP.NET窗体标记的母版页上构建了一个ASPX页。现在,我希望在该页面上有一个IXQuick搜索框,但我需要将其包含在表单标记中才能使其正常工作;但是,当然,在ASPX页面中不能有嵌套的表单标记。

    以下是我如何解决我的问题:

    我在jquery中创建了整个搜索框,并使用jquery替换了客户端中运行的空的div.javascript,将其添加到aspx页面中。 之后 服务器提供其代码,从而绕过嵌套div的任何问题。这也避免了母版页提交母版页表单标记行为的任何问题。您可以在输出的HTML中获得您自己的表单标记,以及您自己的提交行为。

    将这两行放到您希望搜索框出现的ASPX页面中。

    <div id="search"></div>
    <script type="text/javascript">AddSearchBox("#search");</script>
    

    在我的.js文件中,我添加了:

    function AddSearchBox(where){
    var SearchingForm = "<form id='metasearch' name='metasearch' method='POST' accept-charset=' UTF-8' action='javascript:SearchBarSubmit()' ><input name='keyword' type='text' size='32' id='searchbox' /><input type='submit' value='WebSearch'  id='searchbutton' /></form> "
    $(where).html(SearchingForm);
    return false;
    }
    
    function SearchBarSubmit(){
    var searchquery = $('#searchbox').val();
    location.href="http://ixquick.com/do/metasearch.pl?query=" + searchquery + "&cat=web&language=english&cmd=process_search&frm=sb&linkback_url=http://www.mywebsite.com&linkback_sitename=mySiteName";
    return false;
    }
    

    现在,只要有人输入我的搜索框,它就会自动运行ixquick中的搜索查询并显示结果,就像正常的HTML格式一样。更好的是,如果他们没有打开javascript,他们不会得到一个损坏的搜索框,因为他们根本没有得到任何搜索框!我不介意,因为我添加搜索框是为了美观。

    如果使用此代码,请确保将“www.mywebsite.com”更改为您自己的网站,并确保将“mysitename”的链接回更改为您的网站名称。