2010-07-30 6 views
4

Je tente de générer ma première application MVC. J'ai un tableau très basique: Teams: ID, Name. J'ai créé l'application MVC et la table est listée. Voici la vue Créer. Quand il est exécuté, j'obtiens le message: Une valeur est requise. Pouvez-vous aider (désolé, c'est très basique).Création de ma première page Créer avec ASP.Net MVC2

Voir Create.aspx:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"  Inherits="System.Web.Mvc.ViewPage<GettingStarted.Models.Team>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
Create 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<h2>Create</h2> 

<%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %> 

<% using (Html.BeginForm()) {%> 

    <fieldset> 
     <legend>Fields</legend> 
     <p> 
      <label for="Name">Name:</label> 
      <%= Html.TextBox("Name") %> 
      <%= Html.ValidationMessage("Name", "*") %> 
     </p> 
     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 

<% } %> 

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

</asp:Content> 

avec le contrôleur teamcontroller:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Mvc.Ajax; 
using GettingStarted.Models; 
using DB = GettingStarted.Models.GettingStartedDataContext; 

namespace GettingStarted.Controllers 
{ 
    public class TeamController : Controller 
    { 
     // other actions 
     ... 
     // 
     // GET: /Team/Create 

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

     // 
     // POST: /Team/Create 

     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Create(Team team) 
     { 

      if (ModelState.IsValid) 
      { 
       try 
       { 
        var db = new DB(); 
        db.Teams.InsertOnSubmit(team); 
        db.SubmitChanges(); 
        return RedirectToAction("Index"); 
       } 
       catch 
       { 
        return View(team); 
       } 
      } 
      return View(team); 
     } 

    } 
} 
+1

Bon début, mais nous avons besoin d'un peu plus d'informations de votre part. Obtenez-vous l'erreur dans le Get ou le Post? Sur quelle ligne se déroule l'exception? –

+0

@nprosser: En fait, somori fait un bon point. D'après les informations que vous avez fournies, nous ne pouvons pas vraiment savoir si cela se produit dans le GET ou le POST de votre processus de création. Cela arrive-t-il lorsque vous voulez afficher cette vue ou après avoir rempli la zone de texte et l'avoir renvoyée au serveur? –

Répondre

2

Votre Créer une vue est de type solide afin de fournir une vue par exemple de modèle:

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

ou

public ActionResult Create() 
{ 
    return View((Team)null); 
} 
+0

Merci pour votre réponse. Il était logique de passer l'instance du modèle. Cependant, il se plaint encore 'Créer a échoué - une valeur est requise' – user406595

+0

On m'a conseillé d'utiliser après (ms vidéo) [AcceptVerbs (HttpVerbs.Post)] public ActionResult Créer (équipe Team) { si (ModelState .IsValid) { essayez { var db = new DB(); db.Teams.InsertOnSubmit (équipe); db.SubmitChanges(); return RedirectToAction ("Index"); } attraper { retour vue (équipe); } } return Voir (équipe); } – user406595

+0

@nprosser: pourriez-vous également modifier le code de votre question avec celui que vous avez utilisé pour obtenir l'exception ** et ** attacher la trace de pile de cette erreur particulière, afin que nous puissions voir ce qui se passe réellement. –

0

Un conseil: ajoutez également une action Créer, qui prend Team comme paramètre, pour gérer les erreurs de validation.

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

La transmission d'une valeur nulle à un formulaire de création n'est pas non plus nécessaire! Votre problème pourrait être ailleurs. Pouvez-vous essayer d'utiliser

<%= Html.TextBoxFor(model => model.Name) %> 
<%= Html.ValidationMessageFor(model => model.Name) %> 

au lieu de

<%= Html.TextBox("Name") %> 
<%= Html.ValidationMessage("Name", "*") %> 

?

+0

faisait déjà partie du contrôleur: public ActionResult Créer (équipe Team) { if (ModelState.IsValid) {{ essayer var db = new DB(); db.Teams.InsertOnSubmit (équipe); db.SubmitChanges(); return RedirectToAction ("Index"); } attraper { retour vue (équipe); } } return Voir (équipe); } – user406595

+1

Mis à jour ma réponse, essayez ceci :) –

+0

lorsque je remplace par '<% = Html.TextboxFor (model => model.Name)%> <% = Html.ValidationMessageFor (model => model.Name)%> 'Je reçois le message CS1061:' System.Web.Mvc.HtmlHelper 'ne contient pas de définition pour' TextboxFor 'et aucune méthode d'extension' TextboxFor 'n'accepte un premier argument de type' System. Web.Mvc.HtmlHelper 'peut être trouvé (manque-t-il une directive using ou une référence d'assembly?) – user406595

1

Le problème peut être une annotation sur un champ dans le modèle. Avez-vous vérifié votre modèle pour quelque chose comme:

public class Team { 

    [Required(ErrorMessage = "A value is required")] 
    public string whatEver {get; set;} 

    ... 
} 
Questions connexes