【问题标题】:Calling multiple model Entity Framework in MVC View在 MVC 视图中调用多个模型实体框架
【发布时间】:2021-11-17 09:07:53
【问题描述】:

我想在我的 ADD 视图中调用多个模型。我很难在一个视图中调用问题模型和系统模型。见以下代码

问题控制器

public ActionResult GetIssues()
{
  using(SSD_INTERIM db = new SSD_INTERIM())
  {
    var issueList = db.TBL_ISSUES.Where(x => x.STATUS != "Closed").ToList();
    return Json(new { data = issueList }, JsonRequestBehavior.AllowGet);
  }
}

[HttpGet]
public ActionResult GetSystems()
{
  using(SSD_INTERIM db = new SSD_INTERIM())
  {
    var issueList = db.LIB_SSD_SYSTEMS.Where(x => x.ENABLED == "Y").ToList();
    return Json(new { data = issueList }, JsonRequestBehavior.AllowGet);
  }
}

[HttpGet]
public ActionResult AddOrEdit(int id = 0)
{
  return View(new TBL_ISSUES());
}

AddOrEdit.cshtml(视图)

@model ProjectName.Models.TLB_ISSUES
@{
  Layout = null;
}
@using (Html.BeginForm("AddOrEdit","Issues", FormMethod.Post, new { onsubmit = "return SubmitForm(this)"}))
{
  @Html.HiddenFor(model => model.ISSUE_ID)
  <div>
   @Html.LabelFor(model => model.SYSTEMNAME, "System", new { @class = "control-label" })
   @* Put DropdownListFor for system from different model *@
  </div>
  <div>
    @Html.LabelFor(model => model.ISSUE_DESC, "Description", new { @class = "control-label" })
    @Html.EditFor(model => model.ISSUE_DESC, new { htmlAttributes = new {@class="form-control"}})
  </div>
}

实体框架模型的屏幕截图

希望您能帮我解决我的问题,我想用来自不同模型的数据填充系统下拉列表。

【问题讨论】:

    标签: asp.net asp.net-mvc entity-framework


    【解决方案1】:

    一个选项是为您的添加/编辑定义一个视图模型。我建议使用命名约定,例如将该视图称为“详细信息”视图而不是“添加或编辑”。

    [Serializable]
    public class IssueDetailViewModel
    {
        public IssueViewModel Issue { get; set; }
        public ICollection<SystemSummaryViewModel> Systems { get; set; } = new List<SystemSummaryViewModel>();
    }
    
    [Serializable]
    public class IssueViewModel
    {
        //.. relevant Issue fields matching what you will need to insert/update an Issue entity.
    }
    
    [Serializable]
    public class SystemSummaryViewModel
    {
        public int SystemId { get; set; }
        public string DisplayName { get; set; }
    }
    

    然后在添加的情况下填充此模型:

    var systems = db.LIB_SSD_SYSTEMS
        .Where(x => x.ENABLED == "Y")
        .Select(x => new SystemSummaryViewModel
        {
            SystemId = x.ID,
            DisplayName = x.SYSTEMNAME
        }).ToList();
    var model = new IssueDetailViewModel
    {
        Issue = new IssueViewModel();
        Sytems = systems
    };
    return View(model);
    

    当您在视图中绑定控件时,问题的控件使用@model.Issue.{property},而系统的选择由@model.Systems 提供。

    我不建议将实体类传入和传出视图,而是要练习定义视图模型。视图的模型是数据模型(实体反映)的独立关注点。传递实体会导致各种问题,包括暴露的数据实现信息比客户端需要的多,通过网络发送的数据多于客户端需要,序列化和延迟加载引起的性能问题,以及工作时出现的模糊错误带有分离的实体实例。这些错误通常是由于从客户端反序列化时缺少数据或同一数据的多个实例,并且可能是由于情景导致它们间歇性出现或难以重现。

    对于具有许多查找的较大模型,或者您有较大查找列表的情况,您需要实现自动完成搜索以查找匹配项(地址等),那么您可能希望查看执行Ajax 回调服务器以按需或基于搜索条件加载查找。

    【讨论】:

      猜你喜欢
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      相关资源
      最近更新 更多