0

我正在研究 asp.net MVC 2 应用程序。我有 ajax.action 链接,但它不工作。在我看来,我有这段代码:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
   <script type="text/javascript">
       function success(result) {
           alert(result);
           // TODO: do something with the object
       }
   </script>
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <%: Ajax.ActionLink(
    "Delete", 
    "Delete", 
    new { Id = 55 }, 
    new AjaxOptions { OnComplete = "success" })
%>
</asp:Content>

这是控制器代码:

 public ActionResult Index()
 {
      ViewData["Message"] = "Welcome to ASP.NET MVC!";

      return View();
 }



 public JsonResult Delete(Int32 Id) {

     return Json("Record deleted!", JsonRequestBehavior.AllowGet);
 }

但是当我点击链接时,它显示记录已删除!在浏览器中而不是显示为警报。我错过了一些文件吗?

4

1 回答 1

0

您可能需要在页面中包含MicrosoftAjax.jsMicrosoftMvcAjax.js脚本:

<script type="text/javascript" src="<%= Url.Content("~/scripts/MicrosoftAjax.js") %>"></script>
<script type="text/javascript" src="<%= Url.Content("~/scripts/MicrosoftMvcAjax.js") %>"></script>

在 ASP.NET MVC 3 及更高版本中,这些文件obsolete and replaced由 jQuery 不显眼的脚本编写。

既然您已经通过邮件向我发送了您的示例项目,那么问题出在哪里就很清楚了。您已经在<title>页面标签内定义了成功的 javascript 函数,这显然无法正常工作。

因此,在您的 MasterPage 中,您应该为您的脚本定义一个特殊的占位符(还要注意我是如何使用 url 帮助程序修复您到 CSS 文件的硬编码链接的):

<head runat="server">
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
    <link href="<%= Url.Content("~/Content/Site.css") %>" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="<%= Url.Content("~/scripts/MicrosoftAjax.js") %>"></script>
    <script type="text/javascript" src="<%= Url.Content("~/scripts/MicrosoftMvcAjax.js") %>"></script>
    <asp:ContentPlaceHolder ID="Scripts" runat="server" />
</head>

您可以在视图中覆盖:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="Content1" ContentPlaceHolderID="Scripts" runat="server">
    <script type="text/javascript">
        function success() {
           alert('success');
           // TODO: do something with the object
        }
    </script>
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <%= Ajax.ActionLink(
        "Delete", 
        "Delete", 
        new { id = 55 }, 
        new AjaxOptions { OnComplete = "success" }
    ) %>
</asp:Content>
于 2013-03-16T17:58:41.773 回答