1

私は ASP.NET MVC 4 を初めて使用し、既存の MVC 4 コード ベースの使い方を学んでいます。この送信ボタンに対応するフォームを処理するコードを見つけようとしています。アクションリンクはおそらく「送信」ボタンを処理する方法を示していることは理解していますが、アクションリンクに 3 つの文字列を使用するコンストラクターはマイクロソフトのドキュメントにはありません。

入力タグにアクション欄が無いので戸惑います。

その人が送信をクリックするとどうなるかを知るにはどうすればよいですか?

@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data", @class = "disableSubmit" }))
{
...
<div class="buttons">
  <input type="submit" value="Upload" /> | @Html.ActionLink("Back to List", "Index", "Admin")
</div>
}

更新「ソースを表示」に移動して生のHTMLを表示すると、表示されます

<form action="/Lab/Upload" ...

つまり、ラボ/アップロード コントローラーに送信されるということですか?

送信を無効にするための Javascript は次のようになります。

// Disable submit button after click
$(function () {
    $('.disableSubmit').submit(function () {
        if ($(this).valid()) {
            $('input[type="submit"]').attr('disabled', 'disabled');
        }
    });
});
4

2 に答える 2

1

送信ボタンがformタグ内にあるかどうかを確認します。はいの場合、そのアクション属性値は何ですか? それがフォームが送信される場所です。

ビューで呼び出された HTML ヘルパー メソッドが表示される場合Html.Beginformがあります。このメソッドは、フォーム タグをレンダリングします。ページに移動し、ページのビュー ソースをチェックして、フォーム タグがどのように見えるか、およびactionメソッド属性値が何であるかを確認できます。

通常、コントローラーにはHttpPost、フォームの送信を処理する属性でマークされたアクション メソッドがあります。あなたのマークアップがこのようなものだとしましょう

<form action="User/EditUser">
   <input type="text" name=Name" />
   <input type="submit" />
</form>

今あなたUserControllerの中に、このようなアクションメソッドがあるかもしれません

[HttpPost]
public ActionResult EditUser(SomeModelIfExist model)
{
  // TO DO : save and redirect
}

Html.ActionLinkヘルパー メソッドはアンカー タグをレンダリングします。フォーム送信とは関係ありません。したがって、アクション リンク ヘルパーは以下のマークアップを返します。

<a href="Admin/Index">Back</a>
于 2013-06-18T16:54:39.137 に答える
1

送信ボタンが通常のフォーム送信を実行する場合、<form>タグ内または@Html.BeginFormusing ブロックになります。

アクション名やコントローラー名を指定するパラメーターが渡されない限り、BeginForm はビューの名前に一致するアクションにフォームを送信します。

フォーム タグの場合、フォーム タグのaction="something"属性は送信先の URL を示します。通常は controllerName/ActionName ですが、設定されているルーティングによって異なる場合があります。

表示される ActionLink は、フォームや送信とは関係ありません。これは、ユーザーがフォームを送信する代わりに前のページに戻るための実際の方法である通常のリンクです。

また、送信ボタンにJavaScriptが添付されている可能性もあります。残念ながら、javascript をボタンに接続する方法は多数あるため、これを見つけるのは困難です。

編集: あなたの更新に基づいて、このフォームをサポートする JavaScript があると強く思われます。送信ボタンは、表示できる条件が揃うまで無効になっていると思います。許可かもしれませんし、フォームに完全に記入しているかもしれませんが、言うのは難しいです。disableSubmit特定の条件下でそのクラスを削除するコードがどこかにあるのではないかと思うので、javascript で を検索してください。

編集2:最初のクリック後に送信ボタンが無効になるため、誤ってforを2回送信して重複送信の問題を引き起こすことはありません(これが作成フォームの場合、重複レコードを回避します)。私が知る限り、送信先の *.cshtml ファイルと同じ名前のアクションがあるはずです。おそらく、アクションの [Post] または [HttpPost] 属性を使用します。

于 2013-06-18T16:57:47.687 に答える