我在視圖中定義的操作鏈接ActionLink的不是呼叫控制器
@Html.ActionLink("Mark as Completed", "MarkComplete", new { id = item.ID })
然而,這並不調用該方法在我的控制器,而不是鏈接它會產生以下鏈接
http://localhost:52069/Users/MarkComplete/3
[HttpPost]
public ActionResult MarkComplete(int? id) {
if (id == null) {
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Task task = db.Tasks.Find(id);
if (task == null) {
return HttpNotFound();
}
if (ModelState.IsValid) {
task.Completed = 1;
db.Entry(task).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(task);
}
我在這裏丟失的任何東西
Full Vi EW代碼
@model IEnumerable<Base.Models.Task> @{
ViewBag.Title = "UserTasks"; }
<h2>User</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
<h4>Task for User</h4>
<table class="table">
<tr>
<th>
Name
</th>
<th>
Details
</th>
<th>
Start Date
</th>
<th>
Due Date
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>@item.Name </td>
<td>@item.Details</td>
<td>@item.StartDate.ToShortDateString()</td>
<td>@item.EndDate.ToShortDateString()</td>
<td>
@Html.ActionLink("Mark as Completed", "MarkComplete", new { id = item.ID })
</td>
</tr>
}
</table>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
卸下'[HttpPost]'屬性(一個鏈路發出GET,而不是一個POST)。因爲你的方法正在改變數據 - 它應該是一個POST,並且在視圖中使用一個表單。你也可以刪除'if(ModelState.IsValid){' - 你不綁定到模型,所以它總是'真' –
刪除現有的表單,併爲每個項目,使用@using(Html.BeginForm(「MarkComplete」 ,「yourController」,new {id = item.ID})){@ Html.AntiForgeryToken()}'也考慮使用ajax,以便用戶可以繼續 –