1. ホーム
  2. asp.net-mvc

[解決済み】ASP.NET MVC 3 RazorでAjax.BeginFormを使用する。

2022-04-03 13:25:31

質問

を使用したチュートリアルやコード例はありますか? Ajax.BeginForm Asp.net MVC 3 内で、控えめな検証やAjaxが存在する場合は?

これはMVC 3にとってとらえどころのないトピックで、私のフォームを正しく動作させることができないようです。Ajax送信はできますが、バリデーションエラーは無視されます。

解決方法は?

モデル

public class MyViewModel
{
    [Required]
    public string Foo { get; set; }
}

コントローラーです。

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel());
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return Content("Thanks", "text/html");
    }
}

表示します。

@model AppName.Models.MyViewModel

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

<div id="result"></div>

@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "result" }))
{
    @Html.EditorFor(x => x.Foo)
    @Html.ValidationMessageFor(x => x.Foo)
    <input type="submit" value="OK" />
}


と、ここでより良い(私の見解では)例を挙げます。

表示します。

@model AppName.Models.MyViewModel

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/index.js")" type="text/javascript"></script>

<div id="result"></div>

@using (Html.BeginForm())
{
    @Html.EditorFor(x => x.Foo)
    @Html.ValidationMessageFor(x => x.Foo)
    <input type="submit" value="OK" />
}

index.js :

$(function () {
    $('form').submit(function () {
        if ($(this).valid()) {
            $.ajax({
                url: this.action,
                type: this.method,
                data: $(this).serialize(),
                success: function (result) {
                    $('#result').html(result);
                }
            });
        }
        return false;
    });
});

でさらに拡張することができます。 jQueryフォームプラグイン .