我有麻煩執行ajaxified HttpPost操作方法。 ActionMethod Publish中的斷點甚至不會觸發,此方法的Html版本返回:無法找到資源(404)。控制器的名稱沒問題,登錄用戶的角色沒問題,PartialView存在。什麼可能是一個原因?ActionMind無法找到ActionLink - ajax.ActionLink()
這是一個觀點:
<div id="info"></div>
@if (User.IsInRole("admin") && item.IsPublished == false)
{
<p>
@Ajax.ActionLink("Publish", "Publish", new { id = item.RecommendationID }, new AjaxOptions() { Confirm="Are you sure?", HttpMethod="POST", UpdateTargetId="info" })
</p>
}
這是操作方法:
[HttpPost]
[Authorize(Roles = "admin")]
[ValidateAntiForgeryToken]
public ActionResult Publish(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Recommendation recommendation = db.Recommendations.Find(id);
if (recommendation == null)
{
return HttpNotFound();
}
recommendation.IsPublished = true;
db.SaveChanges();
return PartialView("RecommendationPublished");
}
編輯:好 - 現在我知道HttpPost屬性引起了我的問題 - 與HTTPGET正常工作。但是在這種形式下,這個操作將是不安全的(更新數據庫字段)。如何編寫並維護安全規則?
確保你有'jquery.unobtrusive-ajax.js'引用。另外,請嘗試刪除'AntiForgeryToken'。您無法真正將它與'Ajax.ActionLink'一起使用。你需要使用一個常規的'ActionLink'和一些JavaScript來獲取僞造令牌,並將其與'POST'請求放在一起。 –