【发布时间】:2011-12-30 18:38:42
【问题描述】:
我正在尝试在页面上添加通过 Javascript 生成的表单帖子。
我一开始定义了以下路线:
routes.MapRoute(name: "ItemLinks", url: "ItemRequestController/DoItemRequest", defaults: new { controller = "ItemRequest", action = "DoItemRequest" });
但我无法从控制器操作方法中的请求对象中获取表单值。
所以我定义了以下路线:
routes.IgnoreRoute("ItemRequestController/{*pathInfo}");
表格定义为:
@using (Html.BeginForm("DoItemRequest", "ItemRequestController", FormMethod.Post))
{
@Html.AntiForgeryToken()
<input type="hidden" name="hid_ItemID" value="" />
<input type="hidden" name="hid_PositionOnPage" value="" />
在js函数中,我定义了隐藏字段的值(基于点击),然后做:
document.forms[0].submit();
问题是我现在遇到了错误...
用于访问路径的 HTTP 动词 POST '/ItemRequestController/DoItemRequest' 是不允许的。
如何解决这个问题,并在我的控制器操作方法中读取表单 POST 值?
-- 更新--
不敢相信我忘了添加这个...
我确信有一种更优雅的方式来拉取请求变量的...开放给建议。
控制器方法:
[ValidateAntiForgeryToken]
[HttpPost]
public ActionResult DoItemRequest()
{
int itemListID = 0;
int pagePositionNumber = 0;
int.TryParse(Request["itemListID"], out itemListID);
int.TryParse(Request["pagePositionNumber"], out pagePositionNumber);
【问题讨论】:
-
你的控制器方法是什么样的?您是否限制了该方法允许的动词?
-
@GarrettVlieger - 忘记发布控制器方法签名。以上更新。
标签: asp.net-mvc asp.net-mvc-3 c#-4.0 asp.net-mvc-routing http-post