创建具有一对多关系的视图

时间:2014-10-17 05:20:05

标签: c# html asp.net-mvc

我有两个简单的模型:

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,您可以在其中创建一个带编号属性的自定义ViewModel(Region1,Region2,Region3等)但是它有限制,有什么建议吗?

(我知道AngularJS可以用来做这个,但是我还没有这方面的经验。)

由于

2 个答案:

答案 0 :(得分:0)

是的,它很可能只取决于你计划如何实现它。

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

至于在一个帖子中创建一个具有多个区域的国家/地区,可以完成,但您必须考虑实施方式的运作方式。

答案 1 :(得分:0)

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

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

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

以下是使用View Model的一个很好的示例: 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个2类型,你只需要一个新的容器对象:

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

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