14

ユーザー名用とパスワード用の 2 つのフィールドを持つ単純なユーザー登録フォームがあります。UserController次の2つのアクションを持つコントローラーがあります。

[HttpGet]
public ActionResult Register()
{
    return View();
}

[HttpPut]
public ActionResult Register(string username, string password)
{
    // Registering user
    return View();
}

HTTP Putを使用して Web サイトを 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>

ここで何が恋しいですか?どうしたの?

4

3 に答える 3

27

ここでは誰も実際に答えていないので、.02 を追加します。

MVC は、これをサポートするために、次のフィールドを html フォーム (たとえば、Html.BeginForm() を使用するときに使用) に追加します。HttpPut と HttpDelete は Html5 では実際にはサポートされていませんが (これらはある時点でドラフト仕様から削除されました)、MVC のサーバー ライブラリは、次のフォーム フィールドがポストされたときに、リクエストを HttpDelete または HttpPut メソッドに適切にルーティングします。あなたの HttpPost リクエスト:


@using (Html.BeginForm("SomeAction"){ 
   @Html.HttpMethodOverride(HttpVerbs.Delete)
}

于 2012-11-09T21:52:05.700 に答える
7

HTML フォーム (HTML バージョン 4 および XHTML 1 まで) は、HTTP 要求メソッドとして GET および POST のみをサポートします。XHTML 2.0 は、フォームの GET、POST、PUT、および DELETE をサポートします。

サーバーによって読み取られ、それに応じてディスパッチされる非表示のフォーム フィールドを使用することによる、POST によるメソッドのこの回避策。

[HttpPost]現時点では、今すぐ使用するか、リクエストで動詞XmlHttpRequestを使用することを検討してください。Put


アップデート

MvcContribSimplyRestfulRouteHandlerから使用できます

それは非常に簡単です、これを登録してくださいRegisterRoutes

public static void RegisterRoutes(RouteCollection routes)
{
     SimplyRestfulRouteHandler.BuildRoutes(routes);
}

hiddenあなたの中に名前を付けてこのようなフィールドを追加し_methodますform

<input type="hidden" name="_method" value="put" />

これは行くのが良いでしょう。

于 2011-11-18T12:51:06.710 に答える
4

$ .ajaxを使用して、正しい動詞でフォームを送信できます

これが例です

于 2011-11-18T18:44:54.070 に答える