为什么我的回发不能在Html.Actionlink甚至ButtonjQuery上运行
这是我的cshtml代码和jquery,我尝试了两种不同的方法。当我点击approve按钮时,我希望它会转到带有参数的Action ApprovePoints,但什么也没有发生 这是我的控制器:为什么我的回发不能在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()
[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,这样的操作仍然有效。谢谢你的帮助。如果我的帖子有助于回答你的问题,别忘了把它标记为未来人的答案。最好的运气如果你什么都不做,那么将参数传递给你的后期操作有什么意义呢?您对数据库执行查询,但不使用查询结果并始终返回相同的视图。