c# - ASP MVC Ajax 未命中 Controller 功能

标签 c# asp.net ajax asp.net-mvc asp.net-mvc-4

我正在尝试在 APS.Net MVC 中使用 AJAX 来调用我的 Controller 中的函数并从模型中传递参数但是当我在我的代码中放置断点时,单击按钮似乎并没有调用我的 Controller 代码。当点击 Vote Yes 按钮时,我希望调用 VoteYes 函数并将 billid 作为参数传入。 Billid 是作为@Html.Raw(Model.BillId) 检索的页面模型的一部分。从 @Url.Action("VoteYes","Bill") 生成的 URL 生成/Bill/VoteYes

我的 Bill.cshtml 代码:

@model RepresentWebApp.Models.Bill
@{
    ViewBag.Title = "Bill";
}
<head>
    <script src="~/Scripts/jquery-1.10.2.js"></script>
    <script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
</head>

<h2>Bill</h2>
<h3>@Html.DisplayName(Model.Title)</h3>
<h3>@Html.DisplayName(Model.Subjects.Count().ToString())</h3>

<button id="thebutton">Vote Yes</button>

<script>
$(document).ready(function () {
    $("#thebutton").click(function (e) {
        e.preventDefault();
            $.ajax({
                url: @Url.Action("VoteYes","Bill"),
                type: 'POST',
                data: {
                    BillId: @Html.Raw(Model.BillId) 
                },
                success: function(data){alert(data)}
            });
    })
})
</script>

我的 Controller :BillController.cs

namespace RepresentWebApp.Controllers
{
     public class BillController : Controller
     {
        private RepresentDBContext db = new RepresentDBContext();

        public ActionResult Index(int billid)
        {
            Bill bill = db.bill.Find(billid);
            if (bill == null)
            {
                return HttpNotFound();
            }

            return View("Bill", bill);
        }


        [HttpPost]
        public ActionResult VoteYes(int BillId)
        {
            int itWorked = 1;
            return View();
        }

     }
}

这是我加载 URL 页面时的页面源代码:http://localhost:58556/Bill/Index/10139
10139是一个参数,是URL中的billid。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Bill - My ASP.NET Application</title>
    <link href="/Content/bootstrap.css" rel="stylesheet"/>
<link href="/Content/site.css" rel="stylesheet"/>

    <script src="/Scripts/modernizr-2.6.2.js"></script>


</head>
<body>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" 
                data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="/">Application name</a>
           </div>
        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li><a href="/">Home</a></li>
                <li><a href="/Home/About">About</a></li>
                <li><a href="/Home/Contact">Contact</a></li>
            </ul>
            <ul class="nav navbar-nav navbar-right">
                <li><a href="/Account/Register" id="registerLink">Register</a></li>
                <li><a href="/Account/Login" id="loginLink">Log in</a></li>
            </ul>

        </div>
    </div>
</div>
<div class="container body-content">




<head>
    <script src="/Scripts/jquery-1.10.2.js"></script>
    <script src="/Scripts/jquery.unobtrusive-ajax.js"></script>

</head>

<h2>Bill</h2>
<h3>A joint resolution to authorize the use of United States Armed Forces 
against al-Qaeda, the Taliban, and the Islamic State of Iraq and Syria, and 
associated persons or forces, that are engaged in hostilities against the 
United States, the Armed Forces, or</h3>
<h3>0</h3>

<button id="thebutton">Vote Yes</button>

<script>
$(document).ready(function () {
    $("#thebutton").click(function (e) {
        e.preventDefault();
            $.ajax({
                url: /Bill/VoteYes, /*generates */
                type: 'POST',
                data: {
                    BillId: 10139 
                },
                success: function(data){alert(data)}
            });
    })
})
</script>


    <hr />
    <footer>
        <p>&copy; 2017 - My ASP.NET Application</p>
    </footer>
</div>

<script src="/Scripts/jquery-1.10.2.js"></script>

<script src="/Scripts/bootstrap.js"></script>
<script src="/Scripts/respond.js"></script>



<!-- Visual Studio Browser Link -->
<script type="application/json" id="__browserLink_initializationData">
{"appName":"Chrome","requestId":"d3ed6b78215d4868a6d2d6750d9a3186"}
</script>
<script type="text/javascript" 
src="http://localhost:64890/6232fa8de08b494bb34022167291a681/browserLink" 
async="async"></script>
<!-- End Browser Link -->

</body>
</html>

最佳答案

尝试更改您的 url:@Url.Action("VoteYes","Bill"),

url: '@Url.Action("VoteYes","Bill")',

关于c# - ASP MVC Ajax 未命中 Controller 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44689272/

相关文章:

c# - 重新排序序列的最简单方法

c# - 通过 F# 绑定(bind)到 View 模型的接口(interface)实现期间出现 BindingError

c# - 找到与请求匹配的多个操作

asp.net - 何时应为 .NET 4 Framework 设计新的 .NET 项目

javascript - 使用 AJAX 在点击时执行简单的 mysqli 查询

c# - MVC 5 数据注释 "Not Equal to Zero"

Asp.NET Web API - 405 - 不允许用于访问此页面的 HTTP 动词 - 如何设置处理程序映射

c# - 绑定(bind)嵌套中继器的有效方式 3 层深

链接 .then 时的 Jquery 延迟对象问题

javascript - 如何使用 JavaScript 或 PHP 传回唯一 ID?