使用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的截图:
答
这不是项目名称,而是类名称。
对象的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);
您使用的数据层是什么?实体框架?请用适当的标签[编辑]你的问题。 –