【问题标题】:Ajax.BeginForm using ASP.NET MVC 3 - Nothing HappensAjax.BeginForm 使用 ASP.NET MVC 3 - 什么都没有发生
【发布时间】:2012-04-06 20:14:09
【问题描述】:

我需要做的就是创建一个简单的搜索页面,在部分视图中显示结果。我有一个搜索文本框和一个搜索提交按钮。我遵循了我在网上找到的教程,该教程似乎非常容易实现,但我在这里遗漏了一些东西。当我单击搜索按钮时,没有任何反应。任何关于我做错或遗漏的想法将不胜感激。

我在主布局页面中包含以下脚本文件

    @Script("jquery-1.5.1.min.js")
    @Script("modernizr-1.7.min.js")
    @Script("jquery-ui.min.js")
    @Script("jquery.unobtrusive-ajax.js")
    @Script("jquery.validate.min.js")
    @Script("jquery.validate.unobtrusive.min.js")

    @helper Script(string scriptName)
    {
        <script src="@Url.Content("~/Scripts/" + scriptName)" type="text/javascript">    </script>
    }

主搜索视图称为 AdminMenu。这列在我的项目中名为 Admin 的区域下。

我的主视图中的以下代码

    @using (Ajax.BeginForm("AdminSearch", "AdminMenu", new {area = "Admin"}, new AjaxOptions { HttpMethod = "GET", InsertionMode = InsertionMode.Replace, UpdateTargetId = "searchResults"}))
{
    <input type="text" name="q" />
    <input type="submit" value="Search"/>
}

<div id="searchResults">

</div>

我的部分视图中的代码_adminSearch

<div id="searchResults">
    <div class="entitybox">
        @{
            var grid = new WebGrid(
                Model,
                defaultSort: "Name", canPage: false
                );
        }

        @grid.GetHtml(
            tableStyle: "_tableGrid",
            columns: grid.Columns
                (
                    grid.Column("Name", "Name", item => @Html.ActionLink((string)item.Name, "SelectRecord", new { controller = "Menu", agencyKey = item.Id, name = item.Name }))
                )
           )

    </div>
</div>

控制器代码

public class AdminMenuController : Controller
    {

        public ActionResult AdminMenu()
        {
            return View();
        }

        public PartialViewResult AdminSearch(string q)
        {

            Records results = AgencyBusiness.GetAdminSearch(q);
            return PartialView("_adminSearch", results);

        }

    }

当点击搜索按钮时,没有任何反应。如果您在控制器类中的 AdminSearch 方法上放置一个断点,它将永远不会被命中。

提前感谢您的宝贵时间。

【问题讨论】:

  • 听起来像是 javascript 错误。您确定所有脚本都已正确加载吗?浏览器是否抛出任何 javascript 错误? Chrome 开发者工具或带有 Firebug 的 Firefox 可以提供对这些问题的洞察(如果你还不知道:))
  • 在 IE、Chrome 或 Firefox 中未检测到 javascript 错误
  • 如果你在你的视图中执行一个Ajax.BeginForm,在查看页面html源代码时是否应该添加任何表单文本或脚本。我得到的只是查看页面源代码的输入和 div 标签。就好像他们一个人在那里,没有任何联系。
  • 对此不确定,但我希望您的输入至少有一个 Form 标签,因为 AJAX 将序列化表单并提交给表单操作。由于是MS ajax形式,我没有真正使用过,所以我无法真正回答。

标签: asp.net asp.net-mvc asp.net-mvc-3 jquery


【解决方案1】:

我认为问题在于您的主视图和部分视图中都有一个名为“searchResults”的 div。 Ajax 可能会感到困惑。

【讨论】:

  • 我删除了局部视图中的 div 标签,但这不是诀窍。
【解决方案2】:

使用 Ajax.BeginForm 时需要包含 MicrosoftAjax.js 文件。

【讨论】:

  • 我包含了 MicrosoftAjax.js 文件。没有任何变化。
  • @dretzlaff17 - 你还需要 MicrosoftMvcAjax.js - MicrosoftAjax.js 必须在 MicrosoftMvcAjax.js 之前,都必须在 jquery 之后
【解决方案3】:

我解决了这个问题。奇怪的事情。我使用共享视图通过以下行在视图顶部显示当前用户。

@RenderPage("~/Views/Shared/_LoginBar.cshtml")

主要问题是@Ajax.BeginForm 函数没有向浏览器输出任何表单标签。 通过改用以下行,表单标签出现在 HTML 源代码中,并且 ajax 函数起作用。

@Html.Partial("~/Views/Shared/_LoginBar.cshtml")

【讨论】:

    猜你喜欢
    • 2013-11-02
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    相关资源
    最近更新 更多