2

データベースファーストのEFモデル/エンティティを使用して、CRUDフォームなどとともに新しいコントローラーを作成しました。

保存時に多数の検証エラーがスローされますが、フォームにはバリデーターがあるため、なぜそうなるのかわかりません。

私を超えた理由で、私はまったく検証を行っていません。それは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が長さの検証エラーをスローする理由については、私にとっては混乱の問題です。

ありがとう

4

2 に答える 2

2

a) モデルにデータ検証注釈がありません。そのため、何を検証するかを伝えていないため、MVC は検証を行いません。

b) 何を提出しているかについて言及していません。空のフォームを送信しているだけですか?

于 2012-05-03T18:05:28.227 に答える
0

データアノテーションによってこの問題が解決されるようです

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

http://fendy-huang.blogspot.com/2011/04/how-to-pass-empty-string-in-entity.html経由

于 2012-05-03T20:14:46.073 に答える