Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC 5创建新的ViewModel而不保留属性设置_C#_Asp.net Mvc - Fatal编程技术网

C# MVC 5创建新的ViewModel而不保留属性设置

C# MVC 5创建新的ViewModel而不保留属性设置,c#,asp.net-mvc,C#,Asp.net Mvc,我正在为一个站点重构一些代码,并试图减少重复代码 我设置了一个ViewModel,然后创建并覆盖了将填充属性的视图。当我调试时,我可以逐步查看,当创建新对象时,它将填充,但一旦它返回控制器,就没有设置属性。我想我可以在任何时候创建新对象时填充这样的属性 namespace VTC.Models.ViewModels { public class VtcCommentViewModel { DataAccess DAL = new DataAccess();

我正在为一个站点重构一些代码,并试图减少重复代码

我设置了一个ViewModel,然后创建并覆盖了将填充属性的视图。当我调试时,我可以逐步查看,当创建新对象时,它将填充,但一旦它返回控制器,就没有设置属性。我想我可以在任何时候创建新对象时填充这样的属性

namespace VTC.Models.ViewModels
{
    public class VtcCommentViewModel
    {
        DataAccess DAL = new DataAccess();

        public string EmployeeName { get; set; }
        public string EmployeeNumber { get; set; }
        public string ReaderName { get; set; }
        public string Comment { get; set; }
        public string CommentStatus { get; set; }    
        public List<PunchList> PunchList { get; set; }


        public VtcCommentViewModel()
        { }

        public VtcCommentViewModel(Auth_Admin auth)
        {
            ValidETMResult validEtm = DAL.ValidateETM(auth.CurrentUser, auth.CurrentIP);

            VtcCommentViewModel vm = new VtcCommentViewModel();
            vm.EmployeeName = validEtm.emp_name;
            vm.EmployeeNumber = auth.CurrentUser;
            vm.ReaderName = validEtm.rdr_name;
            vm.PunchList = DAL.GetPunchList(auth.CurrentUser);
        }

    }
}
更新

不确定这是否是一个好的设计,但我将属性的填充从ViewModel构造函数移到了控制器中的一个函数中

这就是我现在在控制器中的东西,它似乎可以工作

public ActionResult Comments()
{
    VtcCommentViewModel vm = populateCommentVM(auth);
    SetPageTitle("Enter Exception Log Comments");

    return View(vm);
}

private VtcCommentViewModel populateCommentVM(Auth_Admin auth)
{
    ValidETMResult validEtm = DAL.ValidateETM(auth.CurrentUser, auth.CurrentIP);

    VtcCommentViewModel vm = new VtcCommentViewModel();
    vm.EmployeeName = validEtm.emp_name;
    vm.EmployeeNumber = auth.CurrentUser;
    vm.ReaderName = validEtm.rdr_name;
    vm.Comment = string.Empty;
    vm.PunchList = DAL.GetPunchList(auth.CurrentUser);

    return vm;
}

在构造函数中创建一个新对象
vtcommentviewmodel
,并将属性分配给该新对象

    public VtcCommentViewModel(Auth_Admin auth)
    {
        ValidETMResult validEtm = DAL.ValidateETM(auth.CurrentUser, auth.CurrentIP);

        VtcCommentViewModel vm = new VtcCommentViewModel();
// here you are creating a new object - WRONG!
        vm.EmployeeName = validEtm.emp_name;
        vm.EmployeeNumber = auth.CurrentUser;
        vm.ReaderName = validEtm.rdr_name;
        vm.PunchList = DAL.GetPunchList(auth.CurrentUser);
    }
应该是这个吗

    public VtcCommentViewModel(Auth_Admin auth)
    {
        ValidETMResult validEtm = DAL.ValidateETM(auth.CurrentUser, auth.CurrentIP);

        // assign values to property of the object you are creating - not a new object
        EmployeeName = validEtm.emp_name;
        EmployeeNumber = auth.CurrentUser;
        ReaderName = validEtm.rdr_name;
        PunchList = DAL.GetPunchList(auth.CurrentUser);
    }

注意:您的视图模型不应该知道您的DAL-似乎是一些糟糕的体系结构

您在构造函数中创建了一个新对象
vtcommentviewmodel
,并将属性分配给该新对象

    public VtcCommentViewModel(Auth_Admin auth)
    {
        ValidETMResult validEtm = DAL.ValidateETM(auth.CurrentUser, auth.CurrentIP);

        VtcCommentViewModel vm = new VtcCommentViewModel();
// here you are creating a new object - WRONG!
        vm.EmployeeName = validEtm.emp_name;
        vm.EmployeeNumber = auth.CurrentUser;
        vm.ReaderName = validEtm.rdr_name;
        vm.PunchList = DAL.GetPunchList(auth.CurrentUser);
    }
应该是这个吗

    public VtcCommentViewModel(Auth_Admin auth)
    {
        ValidETMResult validEtm = DAL.ValidateETM(auth.CurrentUser, auth.CurrentIP);

        // assign values to property of the object you are creating - not a new object
        EmployeeName = validEtm.emp_name;
        EmployeeNumber = auth.CurrentUser;
        ReaderName = validEtm.rdr_name;
        PunchList = DAL.GetPunchList(auth.CurrentUser);
    }

注意:您的视图模型不应该知道您的DAL-似乎是一些糟糕的体系结构

除了在vm中包含DAL访问之外,您在构造函数上还存在一些缺陷:

        ValidETMResult validEtm = DAL.ValidateETM(auth.CurrentUser, auth.CurrentIP);

        // Wrong! You are creating a new instance which dies when you left the constructor!
        VtcCommentViewModel vm = new VtcCommentViewModel();
        vm.EmployeeName = validEtm.emp_name;
        vm.EmployeeNumber = auth.CurrentUser;
        vm.ReaderName = validEtm.rdr_name;
        vm.PunchList = DAL.GetPunchList(auth.CurrentUser);
修正:


尝试获取一个将数据加载到viewmodel中的helper类。

除了在vm中包含DAL访问之外,构造函数上还存在一些缺陷:

        ValidETMResult validEtm = DAL.ValidateETM(auth.CurrentUser, auth.CurrentIP);

        // Wrong! You are creating a new instance which dies when you left the constructor!
        VtcCommentViewModel vm = new VtcCommentViewModel();
        vm.EmployeeName = validEtm.emp_name;
        vm.EmployeeNumber = auth.CurrentUser;
        vm.ReaderName = validEtm.rdr_name;
        vm.PunchList = DAL.GetPunchList(auth.CurrentUser);
修正:


尝试获得一个将数据加载到VIEW模型中的助手类。

可能值得考虑的是使用或。其他人已经告诉VM不应该知道DAL。

也许值得考虑的是使用或。其他人已经告诉VM不应该知道DAL。

视图(VM)
和新的
VM
之间,属性已设置?理想情况下,您的ViewModel不应该访问(甚至不知道)DAL。您希望将值从控制器向下传递给构造函数,并以这种方式填充属性。在
视图(vm)
和新的
vm
之间,属性已设置?理想情况下,您的视图模型不应访问(甚至不知道)DAL。您希望将值从控制器向下传递给构造函数,并以这种方式填充属性。删除新对象的创建似乎可以解决此问题。我将研究如何在控制器中获取数据并将其传递给VM。我对控制器进行了更改,并将其作为原始帖子的更新发布。删除新对象的创建似乎可以解决此问题。我将研究如何在控制器中获取数据并将其传递给VM。我对控制器进行了更改,并将其作为对原始帖子的更新发布。