MVC局部视图中的新行导致firefox 5.0 / jQuery 1.6.2中出现问题

时间:2011-07-31 07:53:49

标签: jquery asp.net-mvc

我有一个简单的表,它在MVC局部视图中呈现,并通过jQuery ajax调用返回给客户端。

以下是成功回调的简化版本:

function (html, status, xhr)
{
 html = $(html); //Get html table as a jQuery object
 var tblClass = html.attr("class");
}

现在在IE9中,我得到的表类没有问题。在FF5中它失败了。我在Firebug中调试,发现在返回的html字符串中的<table>标记之前有一个“\ r \ n”。这并不奇怪,因为在部分视图中<table>标记上方有一个空白行,以便于阅读。

运行html = $(html);时,我发现jQuery对象中有2个元素,而不是获得一个带有单个表元素的jQuery对象。

元素[0]在FireBug中显示为:

<TextNode textContent=";\n">

元素[1]是我的表,这导致了问题。我期望的是我在IE9中得到的,这是一个只包含单个元素(表)的jQuery对象。我不知道为什么将空格转换为<TextNode textContent=";\n">

以下是我的观点:

@model IDataPage<EssenceNet.Domain.Transforms.EssenceResult>

<table class="csGrid">
    <tr>
        <th data-sort="Name" class='a' style="min-width:50px"><a></a>Name</th>
        <th data-sort="EssenceTypeID" style="min-width:50px"><a></a>Type</th>
        <th style="width:100%">Description</th>
    </tr>
    @foreach (var r in Model.Items)
    {
        <tr data-id="@r.EssenceID">
            <td style="color:#265E15">@r.Name</td>
            <td>@r.Type</td>
            <td>@r.Description.MaxLength(100)</td>
        </tr>
    }
    @Html.WritePagerRow(Model);
</table>

这是ajax调用(我尝试了几种不同的方式)所有相同的结果:

$.ajax({
                url: url,
                type: 'POST',
                returnType: 'html',
                data: JSON.stringify(data),
                contentType:'application/json',
                success: successFunc
            });

任何想法为什么会发生这种情况以及如何处理它?<​​/ p>

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

确保在制作ajax请求时dataType=html

您可以$(html).find('TextNode').remove().end()

向我们展示您的观点和ajax选项

修改1

在此行@Html.WritePagerRow(Model);中,尝试删除分号

修改2

我想建议的是,当你得到一些意想不到的结果时使用ajax,最好的办法就是

A&GT;看看你在firebug中的反应(大多数人通常会这样做)

B个通过直接在浏览器中输入url来查看您的回复。 (这解决了很多问题)

答案 1 :(得分:1)

您的问题是以下后的分号:

@Html.WritePagerRow(Model);

如果仔细观察Visual Studio,您会发现分号不是浅灰色背景而是白色背景。这意味着它被视为HTML代码,而不是C#代码。

删除分号,你的问题就会消失。

答案 2 :(得分:0)

我不会说空白是问题,但更有可能是新行之前的;字符?

答案 3 :(得分:0)

将返回值换行并将整个事物转换为jQuery对象。