【问题标题】:Passing two models in one view [duplicate]在一个视图中传递两个模型[重复]
【发布时间】:2016-08-30 21:58:41
【问题描述】:

我有两个 db 类,一个是 Tasks,第二个是 AssignedTasks,我想在管理员创建任务时在一个视图中使用它,然后他/她并行分配任务,尽管首先创建视图,然后将任务分配给员工,但是我不知道该怎么做,因为我是 asp.net 的新手,任何人都可以通过示例代码帮助我吗?我的代码如下

  public partial class Task
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Task()
    {
        this.AssignedTasks = new HashSet<AssignedTask>();
    }

    public int TaskId { get; set; }
    public string TaskName { get; set; }
    public System.DateTime TaskDeadLine { get; set; }
    public int TaskNumber { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<AssignedTask> AssignedTasks { get; set; }
}

分配任务的代码是

  public partial class AssignedTask
{
    public int AssignId { get; set; }
    public int AccountId { get; set; }
    public int TaskId { get; set; }

    public virtual Account Account { get; set; }
    public virtual Task Task { get; set; }
}

AssignedTask 类有任务的外键。

【问题讨论】:

  • 您需要创建一个 view model 类,该类具有 view 所需的所有属性。然后将两个 DB 对象中的所有信息映射到 view model 并将 that 传递给您的视图。这是一个非常常见的初学者 MVC 问题,因此如果您需要更多关于该概念的说明,谷歌搜索视图模型将为您生成大量有用的信息。
  • 另外请注意,您真的应该完全避免将 DB 类直接传递给视图,除非您知道自己在做什么 - 它为漏洞打开了大门,因为任何人都可以轻松更改任何POST 请求中类的属性(只需提交带有正确字段的表单以匹配属性名称)。
  • 好的,这对您有帮助,谢谢您的关注 :)

标签: c# asp.net-mvc


【解决方案1】:

您应该为此创建一个 ViewModel,它像这样包装 Task 和 AssignedTask 对象 -

public class TaskViewModel
{
    public Task Task { get; set; }
    public AssignedTask AssignedTask { get; set; }
}

然后将您的 View 与此视图模型绑定,例如 TaskViewModel -

@model MyWebApplication2.Models.TaskViewModel

您将能够像访问任何其他对象一样访问模型属性。例如,要为TaskName 创建一个文本框,您可以这样做 -

@Html.TextBoxFor(m=>m.Task.TaskName)

【讨论】:

    猜你喜欢
    • 2021-08-20
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2017-05-04
    • 2018-01-18
    • 2014-04-03
    相关资源
    最近更新 更多