从ASP中删除功能..NET MVC控制器
本文关键字:NET MVC 控制器 功能 删除 ASP | 更新日期: 2023-09-27 17:53:07
我有一个控制器,用于在数据库中保存数据。控制器如下所示:
[Authorize]
[HttpPost]
public ActionResult Create(EmployeeFormViewModel viewModel)
{
var _employee = new Employee
{
Employee = User.Identity.GetUserId(),
DateTime = DateTime.Parse(string.Format("{0} {1}", viewModel.Date, viewModel.Time))
};
_context.Employees.Add(_employee);
_context.SaveChanges();
return RedirectToAction("Index", "Home");
}
我想删除这行代码
DateTime.Parse(string.Format("{0} {1}", viewModel.Date, viewModel.Time))
,并在其他地方进行计算,以保持控制器干净。哪一种是最好的存档方式?
从给定的数据中,我看到您使用了一个名为EmployeeFormViewModel
的ViewModel来将逻辑从模型中分离出来。我猜你的ViewModel看起来像下面的东西:
public class EmployeeFormViewModel
{
public string Venue { get; set; }
public string Date { get; set; }
public string Time { get; set; }
}
现在,为了在控制器中做出改变,我建议你让它看起来像下面这样:
[Authorize]
[HttpPost]
public ActionResult Create(EmployeeFormViewModel viewModel)
{
var _employee = new Employee
{
Employee = User.Identity.GetUserId(),
DateTime = viewModel.DateTime
};
_context.Employees.Add(_employee);
_context.SaveChanges();
return RedirectToAction("Index", "Home");
}
,然后转到你的ViewModel并添加你在控制器(DateTime
)中添加的新属性。现在你的ViewModel应该如下所示:
public class EmployeeormViewModel
{
public string Venue { get; set; }
public string Date { get; set; }
public string Time { get; set; }
public DateTime DateTime
{
get
{
return DateTime.Parse(string.Format("{0} {1}", Date, Time));
}
}
}
希望这能解决你的问题。
为了提供不同的视角,我建议您可以将其放在扩展方法中。组合日期和时间字符串的概念感觉不应该属于您的领域模型,它感觉像是您可能希望在应用程序中(甚至在其他应用程序中)使用的通用事物。我会这样做…
public static class DateTimeExtensions
{
public static DateTime ParseToDateTime(this string date, string time = null)
{
return string.IsNullOrEmpty(withTime) ? DateTime.Parse(date) : DateTime.Parse($"{date} {time}");
}
}
在控制器中…
[Authorize]
[HttpPost]
public ActionResult Create(EmployeeFormViewModel viewModel)
{
var _employee = new Employee
{
Employee = User.Identity.GetUserId(),
DateTime = viewModel.Date.ParseToDateTime(viewModel.Time)
};
编辑:另外…要合并etr的答案,这也是一个好方法,您可以将两者结合起来…
public class EmployeeormViewModel
{
public string Venue { get; set; }
public string Date { get; set; }
public string Time { get; set; }
public DateTime DateTime
{
get
{
return Date.ParseToDateTime(Time);
}
}
}
富域就是这样。
public class Employee
{
public Employee(int id, object date, object time)
{
Id = id;
DateTime = DateTime.Parse(string.Format("{0} {1}", date, time))
}
public int Id { get; protected set; }
public DateTime DateTime { get; protected set; }
}
:
[Authorize]
[HttpPost]
public ActionResult Create(EmployeeFormViewModel viewModel)
{
_context.Employees.Add(new Employee(User.Identity.GetUserId(), viewModel.Date, viewModel.Time));
_context.SaveChanges();
return RedirectToAction("Index", "Home");
}
我喜欢强类型绑定和Post方法,如下所示:
public ActionResult Create(EmployeeFormViewModel viewModel)
{
viewModel.Post(User.Identity.GetUserId());
_context.Employees.Add(_employee);
_context.SaveChanges();
return RedirectToAction("Index", "Home");
}
视图模型如下所示:
public class EmployeeFormViewModel
{
Employee Employee { get; set; }
DateTime Date { get; set; }
DateTime Time { get; set; }
public void Post(int empid)
{
Employee= new Employee
{
EmployeeID = empid,
DateTime = DateTime.Parse(string.Format("{0} {1}", Date, Time))
};
return;
}
}
这一切都是可能的,因为很好的MVC绑定引擎生成基于查询字符串的EmployeeFormViewModel,在调用动作方法之前。
我把一个"Post"方法在我所有的ViewModels和让MVC做的工作。