我的控制器上有以下方法:
[HttpPost]
public ActionResult UnplannedCourses(int studentId)
{
var model = CreateUnplannedCourseModel(studentId);
return View("UnplannedCourses", model);
}
在我看来我试试:
<div class="unplannedcourses">
@Html.Action("UnplannedCourses", "Student", new { studentId = Model.StudentId })
</div>
但是这给出了一个错误:在控制器'Digidos.MVCUI.Controllers.StudentController'上找不到公共操作方法'UnplannedCourses'。
如果我将[HttpPost]
退出,那么它可以正常工作,但我稍后会从javascript中再次使用该操作,因此我希望只提供POST。
任何想法?
答案 0 :(得分:3)
我认为我最好的选择是基于MVC来源的新属性:
public class ChildishAttribute : ActionMethodSelectorAttribute
{
private static readonly AcceptVerbsAttribute _innerAttribute = new AcceptVerbsAttribute(HttpVerbs.Post);
public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
{
var isPost = _innerAttribute.IsValidForRequest(controllerContext, methodInfo);
var isChildAction = controllerContext.IsChildAction;
var isAjax = controllerContext.RequestContext.HttpContext.Request.IsAjaxRequest();
return isChildAction || (isAjax && isPost);
}
}
[Childish]
public ActionResult UnplannedCourses(int studentId)
{
var model = CreateUnplannedCourseModel(studentId);
return View("UnplannedCourses", model);
}
答案 1 :(得分:2)
Html.Action
是一个html帮助方法,并使用Http GET
而非POST
来调用您的控制器操作。
Html.Action
是一个html辅助方法,可以调用接受GET
个请求的控制器操作。
修改强>
如果您打算通过浏览器保护该页面不被查看,请按以下方式实施ChildActionOnly
属性:
[ChildActionOnly]
public ActionResult UnplannedCourses(int studentId)
{
var model = CreateUnplannedCourseModel(studentId);
return View("UnplannedCourses", model);
}
修改强>
如果您想通过JavaScript通过Http POST
调用您的操作,请查看以下帖子: