使用Create时项目名称保存到数据库而不是字符串

使用Create时项目名称保存到数据库而不是字符串

问题描述:

我的MVC网站存在一些问题,数据库特别保存。所以基本上,我已经创建了一个页面,您可以在其中添加一个新的类别到数据库。但是当它使用WCF Web服务的函数时,它似乎保存了解决方案名称,而不是在“创建”表单中输入的字符串。使用Create时项目名称保存到数据库而不是字符串

的服务功能:

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; 
    } 

控制器:

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(); 
     } 
    } 
} 

而且CSHTML文件:

@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> 

DB的截图:

database structure

+0

您使用的数据层是什么?实体框架?请用适当的标签[编辑]你的问题。 –

这不是项目名称,而是类名称。

对象的ToString()的默认实现返回类名称。

而不是

srvc.addCategory(newCtg.ToString()); 

使用

srvc.addCategory(newCtg.Namn); 

更改 srvc.addCategory(newCtg.ToString()); 至 srvc.addCategory(newCtg.Namn);

我相信你的问题是srvc.addCategory(newCtg.ToString());。除非您为Category对象具有特定的重写ToString()函数,否则这只会返回您提供的引用类型的名称。该观点认为这应该是srvc.addCategory(newCtg.Namn)

你的问题是CategoryController的Create操作方法,您准确这一行:

srvc.addCategory(newCtg.ToString()); 

newCtg是一个类别的实体类型。所以ToString()方法newCtg返回实体类型。这就是保存实体类型的原因。要保存类别名称,您需要将您的型号的Name属性传递给服务:

srvc.addCategory(newCtg.Namn);