web-dev-qa-db-ja.com

asp.net mvc 3-ajaxフォームの送信と検証

すでに質問されている場合は申し訳ありませんが、私はいつか探していましたが、見つけたのはかなり古い投稿(mvc1、mvc2)だけです。 Ajax経由で送信したいフォームがあります。

This 動作するように見えますが、サーバー側の検証については説明していません。

1)AjaxHelper.BeginFormを使用するか、生のjquery呼び出し($.ajax)を使用する必要があるかわかりませんか?ここで推奨されるアプローチは何ですか?

2)クライアント側とサーバー側の検証をどのように処理しますか? mvcフレームワークがこれに対処するための組み込みメカニズムを提供することを望んでいますか?サーバー側でのみ行っている検証がいくつかあります。 ValidationSummaryを使用しても、ここで機能しますか?

目立たないjavascript検証でasp.netmvc3/razorを使用しています。

ありがとうございました!

編集:(以下のBobby Bの要求による)これは、ユーザーがAjaxHelperの使用方法を知りたがっていたため、質問をした数か月後に追加されました。

これは私が使用したjavascriptコードです:

<script type="text/javascript">

function ajaxValidate() {
  return $('form').validate().form();
}

function getGbPostSuccess(ajaxContext){
  // .... it is not necessary to do anything here.
}
function showFaliure(ajaxContext){
   // handle failure
}

HTMLスニペット:

@using (Ajax.BeginForm("Index", "Home", new AjaxOptions
                        {
                            UpdateTargetId = "form1",
                            InsertionMode = InsertionMode.Replace,
                            OnBegin = "ajaxValidate",
                            OnSuccess = "getGbPostSuccess",
                            OnFailure = "showFaliure"
                        }))
{
21
santiagoIT

私はこの目的のためにしばらくの間 malsupのjQueryフォームプラグイン を使用しています。私は正直なところAjaxHelperに精通していませんが、あなたが探していることを実行できるように見えます。クライアント側とサーバー側の両方の検証を行う限り、モデルバインディングとSystem.DataAnnotations名前空間の属性を使用している限り、これはほとんど自動的に行われます。

public class MyModel
{
    [Required(ErrorMessage = "Please enter your name")]
    public String Name { get; set; }

    [Required(ErrorMessage = "Please enter your email")]
    public String Email { get; set; }

    [Required(ErrorMessage = "Please enter a rating")]
    [Range(1, 5, ErrorMessage = "The rating must be between 1 and 5")]
    public Int32 Rating { get; set; }
}

[HttpPost]
public ActionResult Index(MyModel myModel)
{
   if(ModelState.IsValid)
   {
       // good to go, put it in the DB or whatever you need to do
   }
   else 
   {
       return View(model); // return the user back to the page, ModelState errors can be viewed using Html.ValidationSummary() or individual Html.ValidationMessageFor() calls
   }
}

独自のカスタムサーバー側検証を行う場合は、ValidationAttributeを実装する属性を作成して独自のカスタム検証属性を作成するか、ModelState.Errors.Add()(またはその周辺の何か)を呼び出して検証エラーを追加することができます。便利なリファレンスがありません)

クライアント側の場合、MVCは、モデルのDataAnnotations属性に基づいてクライアント側の検証を生成します。

8
Daniel Schaffer

MVC.NET 3には、これがすぐに使用できる状態になっています。 web.configでClientValidationEnabledが有効になっていることを確認してください。チェック this

1
amit_g