为什么我的回发不能在Html.Actionlink甚至ButtonjQuery上运行

为什么我的回发不能在Html.Actionlink甚至ButtonjQuery上运行,jquery,html,asp.net-mvc,postback,Jquery,Html,Asp.net Mvc,Postback,这是我的cshtml代码和jquery,我尝试了两种不同的方法。当我点击approve按钮时,我希望它会转到带有参数的Action ApprovePoints,但什么也没有发生 这是我的控制器: [HttpGet] public ActionResult ApprovePoints() { // Build out the Screen to Approve Points var model = new AdminPointsViewModel()

这是我的cshtml代码和jquery,我尝试了两种不同的方法。当我点击approve按钮时,我希望它会转到带有参数的Action ApprovePoints,但什么也没有发生

这是我的控制器:

[HttpGet]
    public ActionResult ApprovePoints()
    {
        // Build out the Screen to Approve Points
        var model = new AdminPointsViewModel();
        var ptsToApprove = from x in db.CommunityPts
                           join y in db.CertPointTypes on x.TypeId equals y.TypeId
                           where x.Pending == true
                           select new AdminPoints
                           {
                               communityId = x.Community.CommunityId,
                               communityName = x.Community.ComunityName,
                               pointId = x.CertPoint.PointId,
                               pointDesc = x.CertPoint.PointDescription,
                               typeId = x.CertPoint.TypeId,
                               typeDesc = y.TypeName,
                               pointsExpected = x.CertPoint.Points,
                               pointsEarned = (int) x.PointsEarned,
                               dateApplied = (DateTime) x.DateApplied,


                           };
        model.adminPoints = ptsToApprove;
        return View(model);
    }

    [HttpPost]
    public ActionResult ApprovePoints(int cid, int pid)
    {
        var approvePts = db.CommunityPts.Where(x => x.CommunityId == cid && x.PointId == pid).SingleOrDefault();

        return View();

    }
}
以下是标记和jquery:

<form method="post">
<table border="1" style="border-color:white; border-width:thick;">
    <thead style="font-weight:bold">
        <tr>
            <th>Community</th>
            <th>Activity</th>
            <th>Category Code</th>
            <th>Points Expected</th>
            <th>Points Earned</th>
            <th>Date Applied</th>
            <th>Approve</th>
        </tr>
    </thead>

    @if (Model.adminPoints != null)
    {
        foreach (var pts in @Model.adminPoints)
        {
            <tr>
                <td>@pts.communityName</td>
                <td>@pts.pointDesc</td>
                <td>@pts.typeDesc</td>
                <td>@pts.pointsExpected</td>
                <td>@pts.pointsEarned</td>
                <td>@Convert.ToDateTime(@pts.dateApplied).ToString("MM/dd/yyyy")</td>
                <td>@Html.ActionLink("Approve Points", "ApprovePoints", "Admin", new {cid= @pts.communityId, pid = @pts.pointId}, new {@class = "btn btn-default"})</td>
                <td><a href="#" class="btn btn-default" onclick="ApprovePoints(@pts.communityId, @pts.pointId);">Approve Points</a></td>
            </tr>
        }

    }
    else
    {
    <tr>
        <td>There are no points to approve at this time.</td>
    </tr>
    }

    <tfoot>
        <tr>
            <td> </td>
            <td> </td>
            <td> </td>
            <td> </td>
            <td> </td>
            <td> </td>
            <td> </td>
        </tr>
    </tfoot>
</table>
    </form>
<script>
    var ApprovePoints = (function (CommunityId, PointId) {


        var data = new FormData();
        data.append("id", CommunityId);
        data.append("pid", PointId);

        alert(data.get("id"));
        alert(data.get("pid"));

        $.ajax({

            type: "POST",
            url: "/Admin/ApprovePoints/",  
            data: data,
            processData: false,
            success: function () {

                window.location.href = "/Admin/ApprovePoints/" 
            },
            error: function (errorData) { alert(errorData); }


        });

    });
</script>

社区
活动
类别代码
期望分数
获得的分数
适用日期
批准
@如果(Model.adminPoints!=null)
{
foreach(var pts in@Model.adminPoints)
{
@社区名称
@点描述
@pts.typeDesc
@pts.pointsExpected
@点蚀
@Convert.ToDateTime(@pts.dateApplied).ToString(“MM/dd/yyyy”)
@ActionLink(“批准点”、“批准点”、“管理”,新的{cid=@pts.communityId,pid=@pts.pointId},新的{@class=“btn btn default”})
}
}
其他的
{
目前没有需要批准的要点。
}
var ApprovePoints=(函数(CommunityId,PointId){
var data=new FormData();
数据。附加(“id”,社区id);
data.append(“pid”,PointId);
警报(data.get(“id”));
警报(data.get(“pid”));
$.ajax({
类型:“POST”,
url:“/Admin/ApprovePoints/”,
数据:数据,
processData:false,
成功:函数(){
window.location.href=“/Admin/ApprovePoints/”
},
错误:函数(errorData){alert(errorData);}
});
});

看起来您可能对工作中的技术缺少一些了解。我相信你的主要误解是你可以从JavaScript调用一个C函数,而你不能。请记住,在呈现cshtml视图时,所有c#都通过Razor引擎呈现为HTML。您在浏览器中看到的是严格意义上的HTML、JavaScript和CSS。您需要调用MVC路由来调用服务器端函数

打开浏览器控制台。单击链接时是否看到错误
未捕获引用错误:未定义ApprovePoints
?这是因为onclick是一个javascript事件处理程序,ApprovePoints不是一个已定义的函数

您需要使表单元素提交(默认情况下,表单操作将发布到当前路由)。你可能会导致提交一系列方法。例如,对于元素:

<form>
   <input type="submit" value="Click to submit form"/>
   -- or --
   <button>Click to submit form</button>
</form>

--或--
点击提交表格
还是用javscript

<script>
function submitForm(){
   document.getElementById('formid').submit()
}
</script>

函数submitForm(){
document.getElementById('formid').submit()
}
有关表单,请参阅文档


您也可以从中获得一些见解

嗯,我对MVC还不熟悉,但在此之前我在HttpPost上使用过Ajax。尽管如此,我重新命名了post操作,并删除了我操作中的HttpPost,这样的操作仍然有效。谢谢你的帮助。如果我的帖子有助于回答你的问题,别忘了把它标记为未来人的答案。最好的运气如果你什么都不做,那么将参数传递给你的后期操作有什么意义呢?您对数据库执行查询,但不使用查询结果并始终返回相同的视图。