如何使用Entity Framework在MVC4中插入记录?
这是我的浏览页面:
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.brand_id)
</td>
<td>
@Html.DisplayFor(modelItem => item.brand_name)
</td>
<td>
@Html.ActionLink("ADD", "BrandList", new { item.brand_id })
</td>
</tr>
}
这是我的控制器代码:
public ActionResult BrandList()
{
return View(db.brand.ToList());
}
[HttpPost]
public ActionResult BrandList(int id)
{
lovelist Add_Brand = new lovelist();
Add_Brand.lovelist_member = (int)Session["Member_ID"];
Add_Brand.lovelist_brand = id;
db.lovelist.Add(Add_Brand);
db.SaveChanges();
return RedirectToAction("BrandList");
}
这是我到目前为止所做的。
我无法将记录插入我的数据库。
没有任何错误消息。我仍然无法将记录插入我的数据库。
答案 0 :(得分:3)
您的控制器上有2个名为BrandList
的操作。第二个用[HttpPost]
属性修饰,这意味着它只能使用POST动词调用。但是在您显示的代码中,您只有一个超链接:
@Html.ActionLink("ADD", "BrandList", new { item.brand_id })
在HTML中,超链接(锚点)发送GET请求。因此,基本上当您单击此链接时,您将调用第一个不执行任何数据库保存的操作。如果您想使用超链接调用第二个操作,则应重命名它(因为您不能使用相同的动词访问具有相同名称的2个操作)并从中删除[HttpPost]
属性:
public ActionResult SaveBrandList(int id)
{
lovelist Add_Brand = new lovelist();
Add_Brand.lovelist_member = (int)Session["Member_ID"];
Add_Brand.lovelist_brand = id;
db.lovelist.Add(Add_Brand);
db.SaveChanges();
return RedirectToAction("BrandList");
}
您显然也需要调整您的观点:
@Html.ActionLink("ADD", "SaveBrandList", new { item.brand_id })
还可以使用允许您发送POST请求的AJAX链接:
@Ajax.ActionLink("ADD", "BrandList", new { item.brand_id }, new AjaxOptions { HttpMethod = "POST" })
您需要在视图中加入jquery.unobtrusive-ajax.js
脚本才能生效。此外,由于您现在正在使用AJAX调用,因此不需要再次从POST控制器操作重定向,而只需返回一些可在客户端上使用的部分视图或JSON来刷新页面的某些部分。
答案 1 :(得分:1)
您在id和controllername中错过了参数名称。请将您的操作链接更改为
@Html.ActionLink("ADD", "BrandList","ControllerName", new {id = item.brand_id })