C# MVC 5创建新的ViewModel而不保留属性设置
我正在为一个站点重构一些代码,并试图减少重复代码 我设置了一个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();
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。我对控制器进行了更改,并将其作为对原始帖子的更新发布。