【问题标题】:Create View With One-Many Relationship创建具有一对多关系的视图
【发布时间】:2018-06-29 20:59:50
【问题描述】:

我有 2 个简单的模型:

public class Country
{    
    public int ID { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Region> Region { get; set; }
}

public partial class Region
{    
    public int ID { get; set; }
    public string Name { get; set; }
    public int CountryID { get; set; }

    public virtual Country Country { get; set; }
}

是否可以有一个页面来处理一个国家的创建,用户输入多个地区的国家,然后只发布到服务器?

我看到了一个实现 here,您可以在其中创建具有编号属性(Region1、Region2、Region3 等)的自定义 ViewModel,但它有限制,有什么建议吗?

(我知道 AngularJS 可以用来做这件事,但我目前还没有这方面的经验。)

谢谢

【问题讨论】:

    标签: c# html asp.net-mvc


    【解决方案1】:

    是的,很有可能,这取决于您计划如何实施。

    我最喜欢的实现一对多页面的方式是最初创建“一个”(国家/地区),然后重定向到带有网格元素的页面,用户可以在该页面中添加多个(区域)。它运行良好,并且是程序员创建和用户理解的一种非常简单的方法。

    至于在一个帖子中创建一个包含多个地区的国家/地区,这是可以做到的,但您必须考虑如何实施。

    【讨论】:

    • 那么这会像一个选项卡式布局,您可以通过这些选项卡继续操作吗?这样的网格元素将如何工作?感谢您的快速响应。
    【解决方案2】:

    当然,这很容易做到。您已经定义了数据模型。您可以将它也用作您的视图模型,或者您可以创建一个复杂对象的新模型。您类型中的方法:

    public virtual Country Country { get; set; }
    public virtual ICollection<Region> Region { get; set; }
    

    这些方法的出现通常表明您正在使用实体框架,并且这些是您可以在运行时通过此“导航属性”遍历的“相关实体”。您可以在尝试使用时动态创建 Country 并填充 Region 集合。

    这是一个使用视图模型的好例子: What is ViewModel in MVC?

    ///Example of a Controller method creating a view model to display
        [HttpGet]
        public ActionResult Index()
        {
            var user = _userService.Get(User.Identity.Name);
            var customerId = GlobalDataManager.GetCustomerId();
    
            if (_error != null)
            {
                ModelState.AddModelError("", _error);
                _error = null;
            }
    
            var model = new InboundListModel();
            model.Initialize(customerId, user.CompanyId);
    
            foreach (var campaign in model.Campaigns)
            {
                model.InitializeCallProggress(campaign.Id, _callInfoService.GetCallsCount(campaign.Id));
            }
    
            return View(model);
        }
    

    此视图模型可以是您想要的任何东西,但它必须是一种类型。所以如果你想在 ViewModel 中放 2 种类型,你只需要一个新的容器对象:

        public class ComplexViewModel
        {
            public Country Country { get; set; }
            public ICollection<Region> Regions { get; set; }
        }
    

    然后您只需要一种方法来填充数据,就像上面我调用 Initialize 的示例一样。这通过 DAL 项目发送到 EF 并检索模型的数据。

    【讨论】:

    • 我了解 ViewModel 的概念,但是,我不知道如何创建多个区域并将它们绑定到 viewmodel 的 ICollection 属性,然后再发回服务器。 (感谢您的快速响应。)
    猜你喜欢
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    相关资源
    最近更新 更多