如何在MVC4中插入记录?

时间:2013-05-17 04:40:28

标签: asp.net-mvc

如何使用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");
        }

这是我到目前为止所做的。

我无法将记录插入我的数据库。

没有任何错误消息。我仍然无法将记录插入我的数据库。

2 个答案:

答案 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 })