私は見つけることができるすべての解決策を試しましたが、何もうまくいきません。私のコントローラーの関連コードは次のとおりです。
public ActionResult Assign(int id)
{
Person person = sc.GetPerson(id);
if (person == null)
return HttpNotFound();
ViewBag.PersonID = person.PersonID;
ViewBag.FirstName = person.FirstName;
ViewBag.LastName = person.LastName;
ViewBag.PersonTitle = person.Title;
List<Project> projects = sc.GetPersonNonAssignments(id).ToList();
return View(projects);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Assign(int id, int id2)
{
try
{
bool check = sc.CreateAssignment(id, id2);
if (check)
return RedirectToAction("Details", new { id = id });
else
return RedirectToAction("Index");
}
catch
{
return RedirectToAction("Index");
}
}
そして RouteConfig.cs には次のものがあります。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}/{id2}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, id2 = UrlParameter.Optional }
);
これがビューです(HTML5では type="text/javascript" は必要ないようです):
@model IEnumerable<TestService.Project>
@{ViewBag.Title = "Assign Person";}
<script src="@Url.Content("~/Scripts/jquery-1.8.2.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>
<h3>Assign @ViewBag.FirstName @ViewBag.LastName (@ViewBag.PersonTitle) to:</h3>
<table>
@foreach (var item in Model) {
<tr>
<td>@Html.DisplayFor(modelItem => item.ProjectName)</td>
<td>@Ajax.ActionLink("Assign", "Assign", new { id=ViewBag.PersonID, id2=item.ProjectID }, new AjaxOptions { HttpMethod = "POST" })</td>
</tr>
}
</table>
@{string linkname = "Back to " + @ViewBag.FirstName + "'s projects";}
<p>@Html.ActionLink(linkname, "Details", new { id=ViewBag.PersonID })</p>
<p>@Html.ActionLink("Back to People", "Index")</p>
ルート Web.config には次のものがあります。
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
そして、参考までに、Global.asax には次のものがあります。
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
...
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;
}
}
POST は行われず、GET のみが行われます。[HttpPost] を取り除き、2 番目の ActionResult の名前を変更することで、これを確認しました。Chromeで「要素の検査」を試しましたが、エラーは見つかりませんでした。何が起こっている?