-1

如何使用实体框架在 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");
        }

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

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

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

4

2 回答 2

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

也可以使用 AJAX 链接来发送 POST 请求:

@Ajax.ActionLink("ADD", "BrandList", new { item.brand_id }, new AjaxOptions { HttpMethod = "POST" })

您需要jquery.unobtrusive-ajax.js在视图中包含该脚本才能使其正常工作。此外,由于您现在使用的是 AJAX 调用,因此无需再从您的 POST 控制器操作重定向,只需返回一些可在客户端上使用的部分视图或 JSON 来刷新页面的某些部分。

于 2013-05-17T06:10:51.653 回答
1

您在 id 和 controllername 中错过了参数名称。请将您的操作链接更改为

 @Html.ActionLink("ADD", "BrandList","ControllerName", new {id = item.brand_id })
于 2013-05-17T04:45:34.053 回答