2011-03-04 16 views
21

これは既に尋ねられていますが、いつか探していたのですが、古い記事(mvc1、mvc2)が見つかりました。 私はAjaxを介して提出したいフォームを持っています。asp.net mvc 3 - ajaxフォームの提出と検証

Thisは動作すると思われますが、サーバー側の検証は含まれません。

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

2)クライアント側とサーバー側の検証をどのように処理できますか?私はmvcフレームワークがこれに対処するための仕組みを提供したいと思っていますか? 私はサーバー側でしか行っていないいくつかのバリデーションがあります。 ValidationSummaryを使用してもここで動作しますか?

私はasp.net mvc3/razorを使用して、妥協のないJavaScriptの検証を行っています。

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

編集:(下記のBobby Bが要求したとおり)。

<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スニペット:

これにより、ユーザーはこれは私が使用するJavaScriptコードですAjaxHelper

を使用する方法を知りたいと思ったとして、質問をした後、数ヶ月を追加しました。

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

答えて

8

確認してください。私は正直なところ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属性に基づいてクライアント側の検証を生成します。

+0

ありがとう!私は今働いている。私はAjaxHelperを使用して終了しました。 – santiagoIT

+0

あなたはAjaxHelperの使い方について詳しく説明できますか?私は自分自身も同じ問題に直面しており、私は取るべき最良のアプローチが何であるかを判断しようとしています。ありがとう! –

+0

サンプルコードを質問の編集として追加します。そうすれば、私はそれをより良くフォーマットできます;-) – santiagoIT

1

MVC.NET 3にはすでにこれが入っています。 web.configでClientValidationEnabledが有効になっていることを確認してください。私は、この目的のためにしばらくの間、malsup's jQuery form pluginを使用してきたthis

+0

リンクをチェックアウトしましたが、クライアント側の検証を有効にする方法について説明しました。私はクライアント側の検証を有効にしていますが、それは残念ながら私の質問ではありません。 – santiagoIT

関連する問題