我有两个简单的模型:
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可以用来做这个,但是我还没有这方面的经验。)
由于
答案 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,并检索模型的数据。