1

我的 _Layout.cshtml 中有一个 jquery 参考。看起来这在我的 Index.cshtml 页面中不起作用:/Home/GetSquareRoot 没有被击中?(当我取消注释 index.cshtml 中的 jquery 引用时,它可以工作)

ViewStart.cshtml

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

索引.cshtml

@{
    ViewBag.Title = "Home Page";
}
<h2>@ViewBag.Message</h2>
<p>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">
        http://asp.net/mvc</a>.
</p>

@*<script src="../../Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>*@

<script type="text/javascript">
    function calculateSquareRoot(numberToCalculate) {
        $.ajax({
            type: 'GET',
            url: '/Home/GetSquareRoot',
            data: { number: numberToCalculate },
            success: function (data) { alert(data.result); }
        });
    }

</script>

    <button type="button" onclick="calculateSquareRoot(9);">
        Calculate Square</button>

_Layout.cshtml

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>
    <script src="../../Scripts/jquery-1.5.1-vsdoc.js" type="text/javascript"></script>
</head>

<body>
    <div class="page">
        <header>
            <div id="title">
                <h1>My MVC Application</h1>
            </div>
            <div id="logindisplay">
                @Html.Partial("_LogOnPartial")
            </div>
            <nav>
                <ul id="menu">
                    <li>@Html.ActionLink("Home", "Index", "Home")</li>
                    <li>@Html.ActionLink("About", "About", "Home")</li>
                </ul>
            </nav>
        </header>
        <section id="main">
            @RenderBody()
        </section>
        <footer>
        </footer>
    </div>
</body>
</html>

家庭控制器

   public JsonResult GetSquareRoot(long number)
        {
            var square = Math.Sqrt(number);
            return Json(new { result = square }, JsonRequestBehavior.AllowGet);
        }
4

3 回答 3

1

当您将 jQuery 引用注释掉时,它会起作用,因为您的 _Layout.cshtml 文件也有引用(只是陈述事实,我意识到您可能知道这一点)。

这也意味着您的路由设置正确,并且 URL '/Home/GetSquareRoot' 没有任何问题

代码看起来不错,我能看到的唯一未知数是 ../../Scripts/ 实际上与 ~/Scripts/ 位于同一个位置(取决于您页面的 URL 的样子)。

我会使用谷歌浏览器检查您页面上的脚本错误:转到您的页面,右键单击页面上的“检查元素”,然后检查您是否没有任何脚本错误(检查器的右下角会有一个如果你这样做,红色圆圈)。

如果您有可能阻止 AJAX 调用运行的脚本错误。

于 2012-05-01T01:18:38.727 回答
0

在您的应用程序中引用硬编码的内容 URL 时,使用Url.Content.

所以代替这个:

<script src="../../Scripts/jquery-1.5.1-vsdoc.js" type="text/javascript"></script>

用这个:

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

这样,无论页面的 URL 是什么,都将始终使用 jQuery 脚本文件的正确 URL。

于 2012-05-01T02:47:02.647 回答
0

试试这个...

public JsonResult GetSquareRoot(long? number)
        {
            var square = Math.Sqrt(number);
            return Json(new { result = square }, JsonRequestBehavior.AllowGet);
        }
于 2012-05-01T04:00:06.603 回答