1

以下は、データを送信するためのコントローラーの2つの例です。検証が失敗した場合、一方は入力モデルを返し、もう一方は失敗しません。誰かが私にどの方法が正しいか、または好ましいかを教えてもらえますか?それらはまったく同じように動作するようです。

返品モデル付き

    [HttpPost]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
    //do stuff
        }


        return View(model);
    }

モデルを返さずに

    [HttpPost]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
    //do stuff
        }


        return View();
    }
4

4 に答える 4

2

通常、ユーザーが送信したデータが有効でない場合にエラー メッセージを表示する必要があります (たとえば、電子メールであることが必要なフィールドに有効な電子メール アドレスを入力しなかったなど - 詳細については、MVC ModelValidation を参照してください)。

それを確認するには、ModelState.IsValid を使用します。この場合、通常、彼が来たページ ("Register") を表示し、フォーム フィールド (= RegisterModel) に入力したデータも表示する必要があります。しかし、どのフィールドが正しくないかを知らせるエラーメッセージを表示したいと考えています。

ユーザーのデータが正しく、アクションが成功した場合 (この場合、ユーザーは正常に登録されました)、通常はユーザーに登録フォームを再度表示することはありませんが、ユーザーを成功ページにリダイレクトします。

これは、検証、エラーの表示、アクションの成功後のリダイレクトの簡単な例です。

コードの例:

[HttpPost]
public ActionResult Register(RegisterModel model)
{
    if (ModelState.IsValid)
    {
       //do stuff
       // redirect to a success page
       return RedirectToAction("Success");
    }

    // data is not valid - show the user his data and error messages
    // using Html Helper methods (see link for details)
    return View(model);
}

Register ビューで (ない場合 - 厳密に型指定されたビューがある場合は、そのために HTML ヘルパー オーバーロードを使用できます - たとえば、Html.LabelFor、TextboxFor などのメソッドを使用します):

一般的なエラー メッセージ/概要を表示します。

...
<%= Html.ValidationSummary("Register was not successfull") %>

入力の横にエラー メッセージを表示します。

...
<%= Html.TextBox("Email") %>
<%= Html.ValidationMessage("Email", "*") %>
于 2012-07-14T09:52:41.500 に答える
0

モデルを渡さずにレンダーを表示しますか? おそらくそうではないので、2番目のものは失敗します。

Post Redirect Get patternについて読むことをお勧めします

http://en.wikipedia.org/wiki/Post/Redirect/Get

于 2012-07-14T09:46:36.183 に答える
0

最後の最初のアクションはモデルをビューに渡し、2 番目のアクションは空のビューを返します。だから私はあなたが最初のものに行くことをお勧めします

ただし、検証が失敗した場合は、この方法でエラー処理を行う必要があります

if (ModelState.IsValid)
        {
    //do stuff
        }
   else
   {
      ModelState.AddModelError("RegisterModel Errors", "some error occured");
   } 

       return View(model);
于 2012-07-14T09:54:49.043 に答える
0

厳密に型指定されたビューがあるため、いずれの場合も、対応するモデルをビューに渡す必要があります (そうしないと、null モデルのプロパティにアクセスしようとするとビューがクラッシュする可能性があります)。成功すると、別のページにリダイレクトするか、同じページ自体で操作が成功したか失敗したかを更新して、ユーザーに通知を与えることができます (通常の HTML ベースのソリューションが必要か、AJAX 対応のソリューションが必要かによって異なります)。 . 検証に関しては、通常のクライアント側検証と jQuery ベースの控えめなクライアント側検証のオプションがあります。

ここにいくつかの便利なリンクがあります

ASP.NET モデルの検証(これは MVC2 ベースですが、MVC3 でも同じはずです)

MVC3 控えめなクライアント検証

于 2012-07-14T10:45:44.143 に答える