值不能为空。参数名称:实体

时间:2016-02-29 03:27:44

标签: c# asp.net-mvc null entity actionresult

我有以下视图(基本的“编辑”模板)

  @model SuccessStories.Models.Testimonials

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>Testimonials</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        @Html.HiddenFor(model => model.Id)

        <div class="form-group">
            @Html.LabelFor(model => model.Testimonial, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Testimonial, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Testimonial, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

以下操作结果在我的控制器中:

[HttpGet]
    public ActionResult Edit(int id)
    {
            TestimonialsContext testContext = new TestimonialsContext();
            Testimonials testimonials = testContext.testimonialContext.Find(id);
            return View(testimonials);  
    }

    [HttpPost]
    public ActionResult Edit(Testimonials testimonial)
    {
        TestimonialsContext testContext = new TestimonialsContext();
        testContext.Entry(testimonial).State = EntityState.Modified;
        testContext.SaveChanges();

        return RedirectToAction("Index");
    }

错误在这一行:

testContext.Entry(testimonial).State = EntityState.Modified;

我得到的错误是“值不能为空。 参数名称:entity

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ArgumentNullException:值不能为null。 参数名称:实体“

请帮忙。我看了这个,但找不到适合我的解决方案。谢谢!

1 个答案:

答案 0 :(得分:2)

感谢大家的帮助。我想出了这种解决方法,基于你告诉我什么是null。

        [HttpPost, ActionName("Edit")]
    public ActionResult EditConfirmed(int id, string Testimonial)

    {
        TestimonialsContext testContext = new TestimonialsContext();
        Testimonials testimonial = testContext.testimonialContext.Find(id);
        testimonial.Testimonial = Testimonial;
        testContext.Entry(testimonial).State = EntityState.Modified;
        testContext.SaveChanges();
        return RedirectToAction("Index");
    }

Testimonial是输入框的名称,与数据库表中的条目名称相同。