Html Ajax调用非常有效,但非Ajax调用在浏览器中呈现错误。我错过了什么?
在非ajax调用中,其他div中div的顺序会混乱,页面呈现错误。当通过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)%
<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"), "");