0

次のようなビューがあります: DemoView.cshtml

@model Mvc3Razor.Models.UserModel
@{
    ViewBag.Title = "Create";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>
    Create</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>UserModel</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.UserName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.UserName)
            @Html.ValidationMessageFor(model => model.UserName)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.FirstName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.FirstName)
            @Html.ValidationMessageFor(model => model.FirstName)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.LastName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.LastName)
            @Html.ValidationMessageFor(model => model.LastName)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.City)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.City)
            @Html.ValidationMessageFor(model => model.City)
        </div>
        <p>
            <input type="submit" value="Create" /></p>
    </fieldset>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
<script type="text/javascript">
    $(function () {
        $('input[type="submit"]').click(function () {
            $(this).attr('disabled', 'disabled');
        });
    });
</script>

そしてコントローラー: HomeController.cs

[HttpPost]
        public ViewResult Create(UserModel um)
        {
            if (!TryUpdateModel(um))
            {
                ViewBag.updateError = "Create Failure";
                return View(um);
            }

            _usrs.Create(um);
            return View("Details", um);

        }

複数のボタンのクリックを防ぐために、ユーザーが [作成] ボタンをクリックするとボタンを無効にしようとしていますが、[作成] ボタンを無効にすると HttpPost メソッドが起動されません。

この問題を解決するために誰か助けてもらえますか?

4

2 に答える 2

4

送信ボタンがクリックされたときではなく、フォームが送信されたときにボタンを無効にしてみてください。

$("form").submit(function() {
    $(this).attr("disabled", "disabled");
    return true;
});
于 2012-06-12T14:26:32.293 に答える
0

私が提案するのは、投稿が成功したときにユーザーをインデックスページにリダイレクトすることです。PRGパターンを使いたい

Post、Redirect、Get (PRG) パターンでは、「フォームの送信の重複を回避し、Web アプリケーションがブラウザーのブックマークとリロード ボタンを使用してより直感的に動作できるようにする」

usrs.Create(um);
//Redirect to Index Page here

詳細については、このSOの質問を参照してください

于 2012-06-12T14:47:25.810 に答える