使用Entity FrameWork更新记录7.更新时的新记录

时间:2016-04-16 17:09:07

标签: c# asp.net entity-framework

我已经开始学习Asp.net的最后一个弱点(我之前没有.net的任何经验),但我在更新数据库记录方面遇到了一些麻烦。

我只看到一个类似问题(How to update record using Entity Framework 7?),但它没有使用表格或控制器,所以它没有多大帮助。

我有一个对象

namespace Daycare.Models
{
    public class Question
    {
        public Question() {

        }

        public int id { get; set; }
        public string title { get;set;}

        public string question { get; set; }

        public string answer { get; set; }
        public DateTime date { get; set; }
    }
}

控制器和视图是自动生成的。

删除和创建工作正常,但编辑方法只创建新的空对象。

        public IActionResult Edit(int? id)
    {
        if (id == null)
        {
            return HttpNotFound();
        }

        Question question = _context.questions.Single(m => m.id == id);
        if (question == null)
        {
            return HttpNotFound();
        }
        return View(question);
    }

    // POST: Questions/Edit/5
    [HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult Edit(Question question)
    {
        if (ModelState.IsValid)
        {
//stuff i've tried.
        //    _context.questions.Update(question);

                _context.Update(question);
  //          _context.Entry(question).State = EntityState.Modified;
            _context.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(question);
    }

这是表格



<form asp-action="Edit">
    <div class="form-horizontal">
        <h4>Question</h4>
        <hr />
        <div asp-validation-summary="ValidationSummary.ModelOnly" class="text-danger"></div>
        <input type="hidden" asp-for="id" />
        <div class="form-group">
            <label asp-for="question" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                <input asp-for="question" class="form-control" />
                <span asp-validation-for="question" class="text-danger" />
            </div>
        </div>
        <div class="form-group">
            <label asp-for="title" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                <input asp-for="title" class="form-control" />
                <span asp-validation-for="title" 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>
</form>
&#13;
&#13;
&#13;

我非常感谢任何帮助。

提前非常感谢。

2 个答案:

答案 0 :(得分:1)

在所有输入中,您只需要指定name和id属性以及问题类的相应匹配属性。

要么 或者你可以使用htmlhelper输入,标签...... 输入文字

@Html.EditorFor(model => model.title)

用于输入标签

@Html.LabelFor(model => model.title)

因此,在触发提交并调用Edit方法时,问题类会获取值。

//_context.Update(question); //instead of this you can use 

_context.Entry(question).State = EntityState.Modified;
_context.SaveChanges();

答案 1 :(得分:1)

尝试取消注释该行

 _context.Entry(question).State = EntityState.Modified;

此行强制实体框架将对象标记为已修改,并在savechanges()调用期间对该对象运行update命令