2016-04-28 3 views
0

Ich habe ein kleines Problem mit meiner MVC-Website, mit der Datenbank speziell speichern. Im Wesentlichen habe ich eine Seite erstellt, auf der Sie der Datenbank eine neue Kategorie hinzufügen können. Wenn es jedoch die WCF-Webdienstfunktion verwendet, scheint es, den Lösungsname lieber als die Zeichenfolge zu speichern, die in dem Formular Create eingegeben wurde.Projektname speichert in der Datenbank anstelle von Zeichenfolge, wenn Create

Die Servicefunktion:

public string addCategory(string Name) 
    { 
     Database1Entities1 tbl = new Database1Entities1(); 
     Category newCtg = new Category() { 
      Namn = Name, 
     }; 
     tbl.Category.Add(newCtg); 
     try 
     { 
      tbl.SaveChanges(); 
     } 
     catch (System.Data.Entity.Validation.DbEntityValidationException dbEx) 
     { 
      Exception raise = dbEx; 
      foreach (var validationErrors in dbEx.EntityValidationErrors) 
      { 
       foreach (var validationError in validationErrors.ValidationErrors) 
       { 
        string message = string.Format("{0}:{1}", 
         validationErrors.Entry.Entity.ToString(), 
         validationError.ErrorMessage); 
        // raise a new exception nesting 
        // the current instance as InnerException 
        raise = new InvalidOperationException(message, raise); 
       } 
      } 
      throw raise; 
     } 
     string msg = "Done"; 
     return msg; 
    } 

Controller:

public class CategoryController : Controller 
{ 
    // 
    // GET: /Category/ 
    localhost.Service1 srvc = new localhost.Service1(); 
    public ActionResult Index() 
    { 
     return View(); 
    } 
    public ActionResult Create() 
    { 
     return View(); 
    } 
    [HttpPost] 
    public ActionResult Create(Category newCtg) 
    { 
     if (ModelState.IsValid) 
     { 
      srvc.addCategory(newCtg.ToString()); 
      return RedirectToAction("Index"); 
     } 
     else 
     { 
      return View(); 
     } 
    } 
} 

Und die cshtml Datei:

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

<div class="form-horizontal"> 
    <h4>Category</h4> 
    <hr /> 
    @Html.ValidationSummary(true) 

    <div class="form-group"> 
     @Html.LabelFor(model => model.Namn, new { @class = "control-label  col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.Namn) 
      @Html.ValidationMessageFor(model => model.Namn) 
     </div> 
    </div> 

    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" value="Create" class="btn btn-default" /> 
     </div> 
    </div> 
</div> 

Screenshot von DB:

database structure

+0

Welche Datenschicht verwenden Sie? Entitätsrahmen? Bitte [bearbeiten] Sie Ihre Frage mit dem passenden Tag. –

Antwort

0

Es ist nicht der Projektname, sondern der Klassenname.

Die Standardimplementierung von ToString() für ein Objekt gibt den Klassennamen zurück.

Statt

srvc.addCategory(newCtg.ToString()); 

Verwendung

srvc.addCategory(newCtg.Namn); 
0

Ändern srvc.addCategory (newCtg.ToString()); To srvc.addKategorie (newCtg.Namn);

0

Ich glaube, Ihr Problem ist srvc.addCategory(newCtg.ToString());. Wenn Sie keine spezifische ToString()-Funktion für das Objekt Category überschreiben, wird einfach der Name des Referenztyps zurückgegeben, den Sie in das Objekt eingeben. Die Ansicht schlägt vor, dass dies stattdessen srvc.addCategory(newCtg.Namn) sein sollte.

0

Ihr Problem ist in Create Aktionsmethode CategoryController, extactly diese Zeile:

srvc.addCategory(newCtg.ToString()); 

newCtg ist eine Kategorie Entitätstyp. So gibt ToString() Methode von newCtg den Entitätstyp zurück. Deshalb wird der Entitätstyp gespeichert. Um den Kategorienamen zu speichern, müssen Sie die Name Eigenschaft Ihres Modells an den Dienst übergeben:

Verwandte Themen