为什么我的Ajax.BeginForm在我明确指定替换ID时重新加载整个页面?

3

提前道歉,因为我找到了很多建议,但是都没有适合我的。我感觉有点疯狂,所以...

我有一个MVC 3应用程序,在第一次加载时,会显示包含所有用户模型数据的表格。那部分工作正常。我有两个文本框,一个用于帐户ID,另一个用于用户,允许我重新查询更具体的用户数据。当我使用提交按钮时,我得到了数据,但整个页面刷新了,虽然我得到了带有正确数据的表单和表格,但页面的其余部分是白色的。我之前的任何图形或其他东西都没有了。还有一件有趣的事情是,如果我从白色页面再次提交表单,并使用任何有效参数,AJAX就会起作用。我感到困惑。

表单看起来像这样:

@using (Ajax.BeginForm("TaskList", "Dispatch", 
       new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "tblBody", 
       InsertionMode = InsertionMode.Replace }, new { id = "frmTaskList" }))
{
    <table id="tblTaskList" class="tblTaskList"> 
        <thead>
            <tr>
                <th>Ticket ID</th>
                <th>Date</th>
                <th>Customer Name</th>
            </tr>
        </thead>
        <tbody id="tblBody" class="tblBody">        
            @{for (var ix = 0; ix < Model.Value.Count - 1; ix++)
            { 
                <tr id="@(Model.Value[ix].TicketId)">
                    <td>@Model.Value[ix].TicketId</td>
                    <td>@Model.Value[ix].Created</td>
                    <td>@Model.Value[ix].ContactName</td>
                </tr>        
            }}
        </tbody>       
    </table>    

    <input type="text" id="hidAccId" name="hidAccId" value="" />
    <input type="text" id="hidUserId" name="hidUserId" value="" />
    <input type="submit" id="btnTaskList" value="Submit" />
}

同时,我正在使用的脚本位于页面顶部:

<script src="../../Scripts/jquery-ui-1.8.11.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script>

顺便提一下:我尝试使用@Url.Content而不是src属性,但结果无效。我还尝试了以下方法,但结果也没有任何区别:

<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript">    </script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
1个回答

1

你已经两次引用了jQuery和jQuery-ui,这是不必要的。以下代码应该足够:

<script src="@Url.Content("~/Scripts/jquery-1.7.2.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

你需要确保jquery-1.7.2.min.js文件存在于Scripts文件夹中。ASP.NET MVC 3默认只包含jQuery 1.5版本。至于Microsoft*脚本,可以忘记它们,因为在ASP.NET MVC 3中已经不再使用。

此外,你的表单中没有提交按钮。

这个:

<input type="button" id="btnTaskList" value="Submit" />

应该是:

这样写:

<input type="submit" id="btnTaskList" value="Submit" />

如果您期望一个表单提交的发生。


当您提交时,它一开始就无法工作?还是第二次?您在问题中没有提供足够的代码,以便我能够帮助您。Ajax.BeginForm应该可以与jquery和jquery.unoobtrusive-ajax无任何问题地配合使用。 - Darin Dimitrov
最开始它不能工作。它会刷新整个页面并将整个表单带回正确的数据。如果我从刷新后的页面重新提交它,那么 AJAX 就能正常工作了。 - Carlos Mendieta
当页面加载时,控制台中是否有JavaScript错误?应该会有的。你能把你的项目发给我看看吗?从你在这里提供的信息来看,我无法帮助你,而且显然你也无法进行调试。如果你能发送一个缩小了范围的项目版本来说明问题(所有数据都硬编码,这样我就不必设置数据库等等),我很乐意帮你看看并告诉你问题出在哪里。 - Darin Dimitrov
哈哈,我太太需要我。那太好了,Darin。我该把它发送到哪里? - Carlos Mendieta
你可以将它上传到某个地方并发送给我一个链接,或者通过电子邮件发送给我(我的个人资料中有邮箱地址)。 - Darin Dimitrov
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接