0

私はMVC3プロジェクトに取り組んでいます。エラーチェックを行うコントローラーがあります。この部分は、さまざまな制約をユーザー入力に適用するところまで進んでいます。残念ながら、ユーザーがフォームを送信するまでIDが割り当てられないため、javascriptを使用できません。

この ID はエラー チェックに不可欠なので、コントローラーでこれを行いました。

そのため、エラーが発生するたびに、ビューに渡したいエラー メッセージを作成します。ビューはエンティティに強く型付けされています。

私の質問は、どの選択肢を使用すればよいですか? ViewState、View Bag、TempData、または ModelState ?

基本的に、ビューの asp:Label に表示する準備済みのエラー メッセージがあります。これまでのところ、私は試しました:

ViewBag.ErrMsg = "The client must be over 18 to open a TFSA.";

そして、私の見解では

 <% if (ViewBag.ErrMsg != "")
           { %>
       <div class="errorMsg"><asp:Label ID="Label1" runat="server" Text="<%ViewBag.ErrMsg %>" ></asp:Label>
    </div>
    <% } %>

しかし、明らかに、<%ViewBag.ErrMsg %> である引用符の間にあるものは何でも返します。

誰か助けてくれませんか?

4

2 に答える 2

0

あなたはモデルを検証しようとしているので、その目的のために特別に設計された ModelState を使用するのは当然だと思います。

最初にすべきことはbuddy class、エンティティの を作成することです。このオブジェクトは、メタデータを追加することによって Entity Framework エンティティを拡張します。これにより、エンティティを再生成する必要が生じた場合でも、カスタマイズが失われることはありません。したがって、エンティティが と呼ばれる場合Client、次のようになります。

 //This extends the Entity Framework entity thanks to the `partial` keyword
 [MetadataType(typeof(ClientMetadata))]
 public partial class Client { }

 //This class applies metadata through data annotations that validates your model
 public partial class ClientMetadata{
     //Let's say we want to add a couple validation rule to the client's age 
     [Required(ErrorMessage="Age is required")]
     [Range(19,100,ErrorMessage="Your age must be between 19 and 100")] 
     public int Age { get;set; }
 }

これがClientバディ クラスで拡張されたので、ModelState の検証が自動的に開始されます。コントローラーのアクションでは、通常、次のようなものがあります。

  [HttpPost]
  public ActionResult Update(Client client){
      //During model binding, validation is performed on client
      if(!ModelState.IsValid){
           return View(client);
      }
      return RedirectToAction("Index");
  }

検証エラーがある場合は、ビューで ValidationSummary を使用してそれらを表示できます。これにより、すべてのエラーがリストに出力されます。

  @Html.ValidationSummary()

この例は、組み込みのデータ注釈を使用するため、ユースケースから少し離れていますRangeAttribute。最小値には組み込みのデータ注釈がないため、年齢に最大数を指定しました。必要な場合はお知らせください。方法を説明します。私は今ペルーのホステルにいて、ここのインターネットはあまり良くなく、古いプロジェクトなしでネットブックを使っているので、頭のてっぺんからリフしています:)

于 2013-09-06T00:50:28.370 に答える