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

时间:2016-04-28 16:54:52

标签: c# wcf asp.net-mvc-4

我的MVC网站有点问题,专门保存了数据库。基本上,我创建了一个页面,您可以在其中向数据库添加新类别。但是当它使用WCF Web服务的功能时,它似乎保存了解决方案名称而不是在“创建”表单中输入的字符串。

服务功能:

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

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我相信您的问题是srvc.addCategory(newCtg.ToString());。除非您对ToString()对象具有特定的重写Category函数,否则只会返回您输入的引用类型的名称。该视图表明这应该是srvc.addCategory(newCtg.Namn)

答案 2 :(得分:0)

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

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

而不是

srvc.addCategory(newCtg.Namn);

使用

{{1}}

答案 3 :(得分:0)

你的问题出现在Create CategoryController的Action方法中,这一行直言不讳:

srvc.addCategory(newCtg.ToString());

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

srvc.addCategory(newCtg.Namn);