我有一个简单的用户注册表单,有两个字段,一个用于用户名,另一个用于密码。我有一个名为UserController
的控制器,它有以下两个动作:
[HttpGet]
public ActionResult Register()
{
return View();
}
[HttpPut]
public ActionResult Register(string username, string password)
{
// Registering user
return View();
}
我使用 HTTP Put 使我的网站RESTful(插入PUT动词)。但是,当我提交表单时,我收到404错误。这是我的表单的HTML:
<form action='@Url.Action("Register", "User")' method="post">
<div class='field'>
<label for='username'>
Username:
</label>
<input type='text' id='username' name='username' maxlength='100' />
</div>
<div class='field'>
<label for='password'>
Password:
</label>
<input type='password' id='password' name='password' maxlength='50' />
</div>
</form>
我在这里想念什么?怎么了?
答案 0 :(得分:24)
由于这里没有人真的回答,我会加上我的.02
MVC将以下字段添加到html表单(例如,在使用Html.BeginForm()时)用于支持此字段。 尽管Html5实际上并不支持HttpPut和HttpDelete(它们只是在某一点然后从草案规范中删除),但是当发布以下表单字段时,MVC的服务器库将正确地将请求路由到您的HttpDelete或HttpPut方法。您的HttpPost请求:
@using (Html.BeginForm("SomeAction"){
@Html.HttpMethodOverride(HttpVerbs.Delete)
}
答案 1 :(得分:7)
HTML表单(最高为HTML版本4和XHTML 1)仅支持GET和POST作为HTTP请求方法。 XHTML 2.0将支持表单的GET,POST,PUT和DELETE。
使用隐藏的表单字段通过POST为方法解决此问题,该字段由服务器读取并相应地分派。
目前,您可以考虑立即使用[HttpPost]
或使用XmlHttpRequest
在您的请求中使用Put
动词。
您可以使用MvcContrib
中的SimplyRestfulRouteHandler
很简单,请在RegisterRoutes
public static void RegisterRoutes(RouteCollection routes)
{
SimplyRestfulRouteHandler.BuildRoutes(routes);
}
在hidden
_method
的{{1}}字段
form
这样做会很好。
答案 2 :(得分:4)
您可以使用$ .ajax提交带有正确动词的表单
Here就是一个例子