Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html Ajax调用非常有效,但非Ajax调用在浏览器中呈现错误。我错过了什么?_Html_Asp.net Mvc_Ajax - Fatal编程技术网

Html Ajax调用非常有效,但非Ajax调用在浏览器中呈现错误。我错过了什么?

Html Ajax调用非常有效,但非Ajax调用在浏览器中呈现错误。我错过了什么?,html,asp.net-mvc,ajax,Html,Asp.net Mvc,Ajax,在非ajax调用中,其他div中div的顺序会混乱,页面呈现错误。当通过Ajax执行相同的调用时,页面呈现得非常完美 因此,我的主页上有以下搜索表单: <form action="<%=Url.Action("Search") %>" method="post" id="search1" class="search-form"> Search: <%=Html.TextBox("SearchBox1", null)%

在非ajax调用中,其他div中div的顺序会混乱,页面呈现错误。当通过Ajax执行相同的调用时,页面呈现得非常完美

因此,我的主页上有以下搜索表单:

 <form action="<%=Url.Action("Search") %>" method="post" id="search1" class="search-form">
            Search:
            <%=Html.TextBox("SearchBox1", null)%>
            <input  type="submit" value="Go" />
 </form>

 .....

 <div id="search-results">
    <asp:ContentPlaceHolder ID="MainContent" runat="server" />
 </div>

当表单通过Ajax进行sumbit时,所有内容都呈现得非常漂亮。当我关闭Ajax并提交表单时,呈现的html被弄乱了。好像里面有一个放错地方的元素或什么东西。页面上的div不在右div中结束。我看了看,不同意,然后。。。各种各样的事情来寻找差异,我看不到任何事情会导致这种差异

我的控制器方法是:

public ActionResult Search()
{

  if (Request.IsAjaxRequest())
  {
    return View("SearchResultsPartial", sm);
  }
  else
  {
    return View("Index", sm);
  }
}

我的Index.aspx是:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
          Html.RenderPartial("SearchResultsPartial");
</asp:Content>

主页
Html.RenderPartial(“SearchResultsPartial”);
我的SearchResultsPartial.ascx是:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyWebSite.Models.SearchModel>" %>
<% 
            int count = Model.searchResults.Count();
            for (int i = 0; i < count; i++)
            {
                Response.Write(Model.searchResults.ElementAt(i));
            }
%>

我的模型有:

public IEnumerable<String> searchResults;
公共IEnumerable搜索结果;
因此,重要的一点是,搜索引擎返回到模型中的字符串集合。每个字符串都是搜索结果的html。这是使用linq to xml生成的,实际上是XElement.ToString()调用的结果

我的主页有:

<div id="search-results" class="yui-u"> 
      <asp:ContentPlaceHolder ID="MainContent" runat="server" />
</div>

非常感谢您能帮助我们找到解决此问题的方法。我已经没有东西来审视自己了

非常感谢

尝试替换

<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
          Html.RenderPartial("SearchResultsPartial");
</asp:Content>

Html.RenderPartial(“SearchResultsPartial”);


Html.RenderPartial(“SearchResultsPartial”);
在Index.aspx.

中,好的

linq to xml引擎不理解div标记不是自动关闭的,对于空div标记,它会创建
。不知何故,浏览器在执行ajax调用时处理得很好,而在执行非ajax调用时则会把它搞得一团糟。这种行为在所有浏览器中都是标准的

因此,解决方案是在linqtoxml生成的空div标记中放置一个空格。因此,我们最终得到的是
,而不是


然后一切都会完美地进行。

响应。编写
?斯雷?您应该将
PartialView()
返回到AJAX请求:在官方网站上浏览一个优秀的ASP.NET MVC教程,它会对您有很大帮助。@bzlm,Model.searchResults.ElementAt(i)的结果是一个字符串,保存在搜索索引中。它是使用linq to xml创建的一段xhtml,最后由XElement.ToString转换为字符串。如果我想动态地从数据生成这个复杂的xhtml,搜索结果对用户来说太慢了。现在,我使用Response.Write将这个xhtml粘贴到文档中。你建议我怎么做呢?谢谢Max。我编辑了这个问题,为母版页添加了相关部分:我仍然像你建议的那样将它从母版页中取出并放入索引中,不幸的是,没有任何更改。下面是一个有趣的推论:如果生成的xml作为xml数据类型保存在sql server中,空的div标记将另存为,这意味着保存到db时问题仍然存在。
<div id="search-results" class="yui-u"> 
      <asp:ContentPlaceHolder ID="MainContent" runat="server" />
</div>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
          Html.RenderPartial("SearchResultsPartial");
</asp:Content>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
 <div id="search-results">
          Html.RenderPartial("SearchResultsPartial");
 </div>
</asp:Content>
new XElement("div", new XAttribute("class", "my-class"), "");