ASP.NET MVC 4 ist ModelState.IsValid immer falsch

Problem: ich folgte dem tutorial hier und ich ziehen kann Daten aus der Datenbank. Ich kann auch Löschen von Datensätzen aus der Datenbank. Aber wenn ich versuche zu erstellen oder zu Bearbeiten, bekomme ich diesen Fehler:

ASP.NET MVC 4 ist ModelState.IsValid immer falsch

So, wie ich war auf der Suche in den controller und ich sehe, dass es ModelState.IsValid ist, wenn ich einen Haltepunkt setzen, um es, es ist immer falsch.

Hier ist mein Modell:

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Data.Entity; 
using System.Linq; 
using System.Web;

namespace MvcApplication1.Models 
{
    public class Text
    {
       [Key]
       public int id { get; set; }
       [Required]
       public string text { get; set; }
    }

    public class textDBContext : DbContext
    {
       public DbSet<Text> texts { get; set; }
    } 
}

Meiner Datenbank zwei Felder: "id" und "text". "id" ist vom Datentyp int
und "text" ist vom Datentyp string.

Generiert ich diesen controller aus dem Modell erzeugten auch die Ansichten (CRUD)

Hier ist mein controller:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication1.Models;

namespace MvcApplication1.Controllers
{
    public class textDBController : Controller
    {
        private textDBContext db = new textDBContext();

        //
        //GET: /textDB/

        public ActionResult Index()
        {
            return View(db.texts.ToList());
        }

        //
        //GET: /textDB/Details/5

        public ActionResult Details(int id = 0)
        {
            Text text = db.texts.Find(id);
            if (text == null)
            {
                return HttpNotFound();
            }
            return View(text);
        }

        //
        //GET: /textDB/Create

        public ActionResult Create()
        {
            return View();
        }

        //
        //POST: /textDB/Create

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(Text text)
        {
            if (ModelState.IsValid)
            {
                db.texts.Add(text);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(text);
        }

        //
        //GET: /textDB/Edit/5

        public ActionResult Edit(int id = 0)
        {
            Text text = db.texts.Find(id);
            if (text == null)
            {
                return HttpNotFound();
            }
            return View(text);
        }

        //
        //POST: /textDB/Edit/5

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(Text text)
        {
            if (!ModelState.IsValid)
            {
                var errors = ModelState.Values.SelectMany(v => v.Errors);


                //Breakpoint, Log or examine the list with Exceptions.
            }
            if (ModelState.IsValid)
            {
                db.Entry(text).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(text);
        }

        //
        //GET: /textDB/Delete/5

        public ActionResult Delete(int id = 0)
        {
            Text text = db.texts.Find(id);
            if (text == null)
            {
                return HttpNotFound();
            }
            return View(text);
        }

        //
        //POST: /textDB/Delete/5

        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            Text text = db.texts.Find(id);
            db.texts.Remove(text);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}

Hier ist der Bearbeiten-Ansicht:

@model MvcApplication1.Models.Text

@{
    ViewBag.Title = "Edit";
}

<h2>Edit</h2>

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

    <fieldset>
        <legend>Text</legend>

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

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

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

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

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

Was mache ich hier falsch?

  • Haben Sie eine Validierung der Annotationen in MvcApplication1.Models.Text?
  • Entfernen Sie die [Required] über Ihren text Eigenschaften und versuchen Sie es erneut. Nur um zu bestätigen, was @jeroenVannevel sagt. Wenn ja, könnten Sie haben eine weitere Validierung der Annotationen.
  • Durch die Art und Weise, die Sie nicht benötigen Sie den [Key] - Attributs für id entity framework erkennt es durch Konvention, um eine primäre Schlüssel.
InformationsquelleAutor Kevin | 2014-05-12
Schreibe einen Kommentar