2012-05-03 14 views
2

私は、CRUDフォームなどとともにデータベース初のEFモデル/エンティティとともに新しいコントローラを作成しました。EFデータベースで最初に生成されたフォームは検証されません

保存時に多数の検証エラーが発生しますが、フォームにバリデータがあるため、なぜそうなるのでしょうか。

私の外に理由があるため、私はまったく検証が行われていません。ただすぐsaveChanges()呼び出しに行きます。すぐに失敗します。

ここで編集フォームです:

@model StatementsApplication.DAL.StatementTask 

@{ 
    ViewBag.Title = "Edit"; 
} 

<h2>Edit</h2> 

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script> 

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>StatementTask</legend> 



     <div class="editor-label"> 
      @Html.LabelFor(model => model.sInitials) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.sInitials) 
      @Html.ValidationMessageFor(model => model.sInitials) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.dtCompleted) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.dtCompleted) 
      @Html.ValidationMessageFor(model => model.dtCompleted) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.sGroupLabel) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.sGroupLabel) 
      @Html.ValidationMessageFor(model => model.sGroupLabel) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.nGroupSequence) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.nGroupSequence) 
      @Html.ValidationMessageFor(model => model.nGroupSequence) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.sTaskType) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.sTaskType) 
      @Html.ValidationMessageFor(model => model.sTaskType) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.sTaskLabel) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.sTaskLabel) 
      @Html.ValidationMessageFor(model => model.sTaskLabel) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.nTaskSequence) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.nTaskSequence) 
      @Html.ValidationMessageFor(model => model.nTaskSequence) 
     </div> 

     @Html.HiddenFor(model => model.ID) 

     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 
} 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

、ここでは、生成されたモデルです。

namespace StatementsApplication.DAL 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class StatementTask 
    { 
     public int StmtBatchID { get; set; } 
     public string sInitials { get; set; } 
     public Nullable<System.DateTime> dtCompleted { get; set; } 
     public string sGroupLabel { get; set; } 
     public double nGroupSequence { get; set; } 
     public string sTaskType { get; set; } 
     public string sTaskLabel { get; set; } 
     public double nTaskSequence { get; set; } 
     public int ID { get; set; } 

     public virtual StatementBatch tblStmtBatch { get; set; } 
    } 
} 

、ここでは、コントローラのビットだが...

// 
// GET: /StatementTask/Edit/5 

public ActionResult Edit(int id = 0) 
{ 
    StatementTask statementtask = db.StatementTasks.Find(id); 
    if (statementtask == null) 
    { 
     return HttpNotFound(); 
    } 
    ViewBag.StmtBatchID = new SelectList(db.StatementBatches, "ID", "sStatus", statementtask.StmtBatchID); 
    return View(statementtask); 
} 

// 
// POST: /StatementTask/Edit/5 

[HttpPost] 
public ActionResult Edit(StatementTask statementtask) 
{ 
    if (ModelState.IsValid) 
    { 
     try 
     { 
      db.Entry(statementtask).State = EntityState.Modified; 
      db.SaveChanges(); 
     } 
     catch (Exception ex) { 
      throw ex; 
     } 
     return RedirectToAction("Index"); 
    } 
    ViewBag.StmtBatchID = new SelectList(db.StatementBatches, "ID", "sStatus", statementtask.StmtBatchID); 
    return View(statementtask); 
} 

そのいくつかの混乱の問題sInitialsが「必須」検証エラーを投げている理由とsGroupLabelが長さを投げている理由検証エラー。

おかげ

答えて

2

a)のモデルには、データ検証注釈を持っていません。したがって、MVCは何を検証するのかをあなたには知らせていないので、検証を行いません。

b)あなたは提出していることは言及していません。あなたはただ空のフォームを提出していますか?

+0

データの注釈はその謎ように、なぜ私は外の検証エラーを取得していますし、それは任意の検証を持っていない、を経由してこの問題

[Required(AllowEmptyStrings = true)] [DisplayFormat(ConvertEmptyStringToNull = false)] public object Note { get; set; } 

が解決されると思わあなたの(b)の質問に答えるために、私はいくつかのデータが入った行を編集しています。既存の行と、別のプロセスによって生成されたデータです。 – reidLinden

+0

@reidLinden - 2つ(または3つ)のレベルの検証があります。クライアントサイドのjquery検証、サーバー側のMVC検証、そしてEFのモデル属性の検証があります。 efモデルで流暢なマッピングを使用していますか?あなたはいくつかのフィールドが必要であることを伝えていますか? –

+0

私はasp.net/mvcのものになるとかなり生き生きしている...だから、Fluentのような言葉の認識の欠如は私がそうでないと言うことさえできない。私が知っているのは、既存のデータベースからEFレイヤーを生成したことだけです。最大の長さのエラーが見つかりました。私はテーブルを更新したいが、モデルのリフレッシュを再実行するのを忘れてしまった...しかし、それでもsInitials ..私の唯一のアイデアは、何とかして、カラムにNOT NULL制約があるので(デフォルトの '空のフィールドがサーバーに戻ったとき、またはあなたが言及したEF検証レイヤーを空にしたときに、nullとカウントされます)。 – reidLinden

関連する問題