【问题标题】:MVC model with a property for related models具有相关模型属性的 MVC 模型
【发布时间】:2019-04-25 04:39:09
【问题描述】:

假设有一个模型定义为:

public class Book
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public List<Guid> RelatedBooks { get; set; } // List<Book> would be more ideal.
}

我正在尝试在“创建”和“编辑”视图中添加一个字段,用户将能够在此示例中按名称搜索相关项目,然后将它们作为相关项目添加到新/当前项目.

我认为这可以通过局部视图 + jQuery 实现,其中局部视图充当搜索框并返回项目列表。然后使用一些按钮和 jQuery 魔法,可以在提交父表单时将它们添加到当前模型中。

如果它是唯一的选择,我不反对使用 jQuery,但我想知道是否有任何替代方案?

如果这太含糊,我很乐意添加一些更具体的细节,我已经尝试搜索类似的问题,但要么使用了错误的搜索词,要么没有。

任何帮助将不胜感激 - 如果有更清洁的替代方案,我宁愿不走 jQuery + 部分视图路线。

【问题讨论】:

    标签: c# .net model-view-controller asp.net-mvc-5


    【解决方案1】:

    首先,您需要为您想要实现的目标创建一个视图模型,该模型将包含相关书籍的列表,以及我们可以选择的所有书籍的列表。

    public class CreateBookViewModel {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public List<Guid> RelatedBooks { get; set; }
    
        public List<Book> AllBooks { get; set; }
    }
    

    在 Controller 中填充 AllBooks 并返回视图模型。然后你可以创造一些魔法,也许使用 jQuery,有一个包含所有书籍的选择列表,当被选中时,它们会按 Id 添加到相关书籍列表中。至少你不需要部分视图,如果你不想要更多的功能而不仅仅是选择一本书或多本书。

    【讨论】:

    • 啊,是的,有问题的模型是假设的(我在实际实现中确实使用了视图模型)-我已经考虑了上述内容,但它阻止了用户搜索所有书籍,也意味着每次他们可能想要创建或编辑一本书时加载每一本书,最终(有很多本书)对性能没有好处。不过感谢您的意见,非常感谢,如果我找不到替代方案,像上面这样的概念证明将是一个很好的起点。
    • @Callum 到时候我会编辑我的答案,因为那时我绝对认为你应该使用 jQuery(或任何其他 Javascript 框架)在创建/编辑页面上有一个自动完成搜索框,它根据搜索条件从某个控制器上的 AJAX 端点请求 book。
    猜你喜欢
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 2014-06-27
    • 2011-12-29
    • 2020-12-21
    相关资源
    最近更新 更多