我的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的屏幕截图:
答案 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);