0

パーティーに少し遅れていることに気づきましたが...私は最初のMVCプロジェクトで作業しており、実行する必要のあることのほとんどを処理することができました。プロジェクトのほとんどは、単にデータを読み取り、データをグラフに送り込みます。ただし、モデルが次のようになっているビューが1つあります(親クラスのプロパティはここでは重要ではありません)。

public class Class1 : ParentClass
{
public List<ChildClass> ChildClassList{get;set;}
}

ChildClassは次のようになります。

public class ChildClass
{
   public int Property1{get;set;}
   public int Property2{get;set;}
   public string Property3{get;set;}

   public int? ID{get;set;}
   [Editable(true)]
   public decimal? Property4{get;set;}
}

現在、データの取得は問題ではありません。リストをループして、次のように編集するためのテーブルを作成できます。

<% foreach(var g in Model.ChildClassList){%>
   <tr>
     <td style="text-align: right;">
    <%= Html.Label(g.Property3)%>
 </td>
     <td>
        <%=Html.TextBox(Model.ParentProperty.ToString() + "_" + g.Property2, (g.Property4.HasValue ? g.Property4.Value.ToString("C") : "$0.00"))%>
     </td>
   </tr>
<% }%>

過去数日間このサイトを巡回した後、POSTメソッド(フォームの下部に[保存]ボタンがあります)でサーバー側の入力を検証できることに気づきましたが、( a)検証エラーメッセージをユーザーに返すにはどうすればよいですか?(b)検証クライアント側を実行しますか?

また、このビューは、テーブルとしてレンダリングされる前に、リスト内の値を使用してグラフの一部を作成することにも言及する必要があります。

4

1 に答える 1

0

アクションのサーバー側では[HttpPost]、次のようにモデルの有効性を確認できます。

[HttpPost]
public ActionResult Save(Class1 model)
{
   if (!ModelState.IsValid)
      return View(model);
   // Code to save model.
}

エラーを表示するには、ビューを更新する必要もあります。

<%= Html.ValidationSummary(false, "Please fix these errors.")
<% foreach(var g in Model.ChildClassList){%>
   <tr>
     <td style="text-align: right;">
    <%= Html.Label(g.Property3)%>
 </td>
     <td>
        <%=Html.TextBox(Model.ParentProperty.ToString() + "_" + g.Property2, (g.Property4.HasValue ? g.Property4.Value.ToString("C") : "$0.00"))%>
        <%= Html.ValidationMessageFor(model => g.Property4)
     </td>
   </tr>
<% }%>

クライアント側で有効にする場合は、控えめなクライアント検証を使用する必要があります。これは、web.config を更新することで実行できます。

<configuration>
    <appSettings>
        <add key="ClientValidationEnabled" value="true"/>
        <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
    </appSettings>
</configuration>

また、次の JS ライブラリが必要です。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"           type="text/javascript"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js"      type="text/javascript"></script>
<script src="//ajax.microsoft.com/ajax/jQuery.Validate/1.7/jQuery.Validate.min.js" type="text/javascript"></script>
<script src="//ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>

補足として、ループを回避してビューをレンダリングしてください。これは不要なコード スープであり、エディター テンプレートを使用することで回避できます。

于 2012-02-12T23:15:08.380 に答える