asp.net - 使用 Entity Framework 和 MVC 在一个 View 中动态添加和删除项目

标签 asp.net entity-framework asp.net-mvc-3 one-to-many

我已经以不同的形式回答同一个问题有一段时间了(例如 Entity Framework and MVC 3: The relationship could not be changed because one or more of the foreign-key properties is non-nullable ),它仍然困扰着我,所以我想我应该更笼统地说一下:

我觉得这不是一个非常不寻常的问题:

您有一个实体对象(使用 Entity Framework ),比如用户。 User 有一些简单的属性,例如 FirstName、LastName 等。但它也有一些对象属性列表,以众所周知的电子邮件为例,以使其变得简单。电子邮件通常被设计为对象列表,以便您可以向该对象添加地址和类型(家庭、工作等)等属性。我以此作为示例以保持其通用性,但它可以是任何东西,重点是,您希望用户能够添加任意数量的这些项目。您还应该能够删除项目(旧地址或其他)。

现在,在普通网页中,您希望能够在同一 View 中添加这些项目。但 MVC 的设计似乎只是在您调用一个全新的 View 来添加地址时才可以轻松做到这一点。 (例如,在索引 View 的模板中,您可以获得“新建”链接)。

我遇到过几个例子,它们的作用与我在这里的意思很接近:

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

问题是,虽然这些网站上的示例项目工作正常,带有模拟模型对象,并且只是列表(不是带有子列表的对象),但如果您确实想对发布的信息执行某些操作,那就是另一回事了- 在我的例子中,通过 Entity Framework 模型保存到数据库。为了适应这些情况,突然间我陷入了错综复杂且绝对不是干代码的迷宫......使用 AutoMapper 和诸如此类的东西来处理对象,并且 Entity Framework 不会让你保存等等(见上文)如果您对详细信息感兴趣,请点击链接)。

我想知道的是,这真的有可能是一件不寻常的事情吗?更新与父对象相同的 View 中的子集合(例如本例中的电子邮件地址)?在我看来,这根本不常见,并且必须有一种处理这种情况的标准方法,而我只是错过了它(到目前为止,这里没有人能够向我指出一种简单的方法)解决方案,也许是因为我用自己的应用程序示例使它变得过于抽象)。

因此,如果有一个简单的解决方案来解决我认为应该是一个简单的问题(因为设计很常见),请告诉我。

最佳答案

您是否尝试过更新 Steven Anderson 博客链接中的项目以绑定(bind)到复杂对象?在模型中创建一个名为 Sack 的类,并给它一个属性,看看是否可以让它工作。

public class Sack
{
    public IEnumberable<Gift> Gifts { get; set; } 
}

我只花了一分钟就按照我想的那样启动并运行它。接下来我要做的改进是添加一个 HtmlHelper 扩展,它本质上与 Html.EditorFor(m => m.SomeProperty) 相同,只是将其称为更有意义的名称并使其与项目中提供的前缀范围扩展。

public static class HtmlExtensions
{
    public static IHtmlString CollectionEditorFor<TModel, TValue>(this HtmlHelper html, Expression<Func<TModel, TValue>> expression)
    {
        if (/* type of expression value is not a collection */) throw new FailureToFollowTheRulesException("id10t");

        // your implementation
    }
}

关于asp.net - 使用 Entity Framework 和 MVC 在一个 View 中动态添加和删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5154640/

相关文章:

.net - 存储过程在 Entity Framework 中很慢

.net - 如何配置 Simple Injector IoC 以使用 RavenDB

asp.net-mvc-3 - ASP.Net MVC 3 - 编辑器模板的客户端不显眼验证

c# - ORA-00936 : missing expression using Entity framework update statement

c# - "Context cannot be used while the model is being created"异常与 ASP.NET 标识

javascript - 在 MVC 发布后设置在 JavaScript 中打开的新窗口的 ContentType

c# - jQuery如何在删除属性之前检查属性是否存在

c# - 在asp.net中将图片url转换为图片bye

javascript - 查找父浏览器或同级浏览器窗口

ASP.NET, VB : checking which items of a CheckBoxList are selected