【问题标题】:How to bind data in ASP.NET MVC 5 / Entity Framework?如何在 ASP.NET MVC 5 / Entity Framework 中绑定数据?
【发布时间】:2017-06-24 14:00:06
【问题描述】:

我对 MVC 完全陌生,从我熟悉的 Webforms 迁移过来。

我已经掌握了基础知识,现在正在尝试使用数据库。我可以将数据发送到视图没有问题,但是如何将编辑后的内容取回?

我看到很多这样的例子:

public ActionResult Update(MyObject myObject)
{
    //do database EFW here
}

我无法弄清楚您如何将数据从网络表单(视图)获取到 myObject。我没有做任何聪明的事情,我在网上遵循了一些示例,但没有人解释这种机制是如何工作的。

对于表单,我使用@Html.BeginForm 和辅助函数 (Html.TextBoxFor) 等来创建我的表单字段。现在的问题是我无法取回已编辑的数据,因此我可以更新我的数据。我点击了正确的控制器动作。

唯一不同的是我的表单 a 是引导对话框中的局部视图。

更新

好吧,我终于在我的操作方法中有一个对象,但是它没有填充关键字段,只有表单上的东西,所以我仍然无法保存它(作为更新),因为我没有知道是哪一个。

我得到这个对象并将其发送到视图

var diary = new mySQLEntities().Diaries.Single(d => d.DRefno == Id);

一切都很好,那么我想做的就是这个,或者类似的东西

    public ActionResult DiaryItemUpdate(mymvc.Diary Diary)
    {           
        mySQLEntities db = new mySQLEntities();

        db.Diaries.Add(Diary);

        db.SaveChanges();

        return RedirectToAction("Index", "Home");
    }

[Bind(Include = ... )] 不起作用,它只会删除所有属性,甚至是我返回的属性。

我看到的所有示例似乎都在做同样的事情,但它只是不起作用。

我以为这很容易,但事实并非如此。不久前我看了 EF 并出于这个原因放弃了它。它说它使开发变得容易,这对我来说变得更加困难。我明白为什么我坚持使用网络表单这么久了。

【问题讨论】:

  • 这完全解释了here。它应该可以帮助你。还可以在该网站上花一些时间来提高您的 MVC 技能。
  • 谢谢。我现在已经走得更远了。查看更新
  • 您的问题基本上是“如何使用 MVC 和 EF?”我认为您不会在这里找到答案,这是针对特定问题的。如何实现 MVC、EF 和其他东西有很多不同的方法。如果您需要我的个人意见,这份复数指南很长,但包罗万象,使用了最佳实践和模式。 app.pluralsight.com/library/courses/…
  • 您的问题与英孚无关。这都是关于 basic model binding 的,它是 MVC 的核心。一旦你明白了,你就会看到它的美妙之处,以及它如何真正让你以 Web 表单无法做到的方式分离你的关注点。 ViewModel pattern 是处理 EF 的好帮手。

标签: c# asp.net-mvc entity-framework asp.net-mvc-5


【解决方案1】:

如果您希望将它们传回,您传入的任何属性都需要在表单中进行实例化。您需要将对象的 ID 添加为隐藏的表单元素:

@Html.HiddenFor(model => model.ID)

这将确保您发送到视图的对象的 ID 被回发。

【讨论】:

  • 好吧,这很有趣。我现在看过 4/5 的视频,但没有一个人这样做。如果我有 10 或 20 个隐藏值(差)示例怎么办?我没有看到 atm EF 比我自己做并一起放弃 EF 更好。
  • 这个答案会让 OP 偏离正轨。使用@Html.HiddenFor(model => model.ID) 的目的是使模型的ID(如传递给视图的对象中)不会显示在页面上。您遇到的任何示例都极有可能使用 viewModel 方法来隐藏数据,这样数据甚至永远不会到达表单。
  • Adam,使用@Html.HiddenFor(model => model.ID) 的重点确实是它不会显示在页面上,但它也可以通过 ViewModel 发送回控制器,它允许您获取实际对象从具有该 ID 的数据库中,并更新值。
猜你喜欢
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 2015-06-10
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
相关资源
最近更新 更多