【问题标题】:Ajax.BeginForm results in redirect to partial view instead of in-placeAjax.BeginForm 导致重定向到部分视图而不是原地
【发布时间】:2011-10-04 17:13:16
【问题描述】:

我的 Search.cshtml 有一个要更新的名为“search-results”的 div。 SearchResults 是操作名称。我在 MVC2/VS2008 项目上做过很多次,但这是我第一次使用 MVC3 和 VS2010。

问题是,我的搜索结果不是在我的 div 中呈现,而是单击提交重定向我将我的部分显示为独立页面。

我读到这可能是因为 Ajax 未启用。我的 _Layout.cshtml 看起来像这样:

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
    <script src="@Url.Content("~/Scripts/2011.2.712/jquery-1.5.1.min.js")"  type="text/javascript"></script>
    <link href="@Url.Content("~/Content/themes/base/jquery.ui.core.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/themes/base/jquery.ui.datepicker.css")" rel="stylesheet"  type="text/css" />
    <link href="@Url.Content("~/Content/themes/base/jquery.ui.theme.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/main.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/2011.2.712/jquery-1.5.1.min.js")" type="text/javascript"></script>
    @(Html.Telerik().StyleSheetRegistrar().DefaultGroup(group => group.Add("telerik.common.css").Add("telerik.transparent.css").Combined(true).Compress(true))) 
</head>
<body>
    <div class="page">
        <div id="header">
            <div id="title">
                <h1>My MVC Application</h1>
            </div>

            @(Html.Telerik().Menu()
                    .Name("menu")
                    .Items(menu => {
                        menu.Add().Text("Home").Action("Index", "Home");
                        menu.Add().Text("About").Action("About", "Home");
                        menu.Add().Text("Employees").Action("List", "Employee");
                    }))
        </div>

        <div id="main">
            @RenderBody()
            <div id="footer">
            </div>
        </div>
    </div>
    @(Html.Telerik().ScriptRegistrar().DefaultGroup(group => group.Combined(true).Compress(true)))</body>
</html>

我需要添加 MicrosoftMvcAjax.js 或 jquery.unobtrusive-ajax.js 吗?我的 web.config (root) 包含以下内容:

  <appSettings>
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
  </appSettings>

如果我在元素末尾添加 MicrosoftMvcAjax.js,我会从 MicrosoftMvcAjax.js 的第一行收到一条错误消息,提示命名空间“类型”是未定义的错误:

    Type.registerNamespace('Sys.Mvc');Sys.Mvc.$create_AjaxOptions=function(){return {};}

我在这里错过了什么。我确信我的代码很好,因为它几乎是从我的 MVC2 项目中逐字复制的。

【问题讨论】:

    标签: c# ajax asp.net-mvc forms razor


    【解决方案1】:

    您忘记在页面中包含jquery.unobtrusive-ajax.js 脚本(根据需要调整路径):

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

    Microsoft*.js 脚本而言,它们在 ASP.NET MVC 3 中已过时,除非您要移植一些遗留应用程序,否则不应再使用它们。它们已被 jQuery 取代。

    【讨论】:

      【解决方案2】:

      好的,找到我的问题了。

      我使用 AjaxOption OnSuccess 指针调用 Ajax.BeginForm 指向更新占位符的 js 函数。但这不是必需的,用不显眼的。从 Ajax 选项中删除 OnSucces 后,一切都开始工作了。

      ~S

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-29
        • 2012-09-06
        • 2020-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多