我有很多控制器从输入值stdo
中提取相同的值,如下面的控制器所示。
// Controller
public ActionResult GetValues(StatisticsDTO stdo)
{
var startDate = DateTime.Parse(stdo.Timespan.Substring(0, 10));
var endDate = DateTime.Parse(stdo.Timespan.Substring(12));
// Rest of controller actions ...
}
我想要做的是在StatisticsDTO
对象的构造函数中完成这两个操作,然后添加到另一个属性。
我尝试将行移动到两个不同的构造函数中,但是TimeSpan
value始终为null。这是可能的还是有其他方法来重构这个?
public class StatisticsDTO
{
public string Timespan { get; set; }
public string Country { get; set; }
public string AppName { get; set; }
public DateTime StartDate { get; set; } // New property
public DateTime EndDate { get; set; } // New property
public StatisticsDTO() {
this.StartDate = DateTime.Parse(Timespan.Substring(0, 10));
this.EndDate = DateTime.Parse(Timespan.Substring(12));
}
public StatisticsDTO(string Timespan, string Country, string AppName)
{
this.StartDate = DateTime.Parse(Timespan.Substring(0, 10));
this.EndDate = DateTime.Parse(Timespan.Substring(12));
}
}
我希望你能理解我在这之后所做的一切。
修改
假设我使用数据变量
$ajax
来调用此操作
$.ajax({
type: "GET",
url: "/GetValues",
data: { Timespan: "01/01/01 - 02/02/02", Country: "US", AppName: "V1" }
});
这些参数被转换为StatisticsDTO
对象。我希望在创建stdo对象时在构造函数中设置StartDate
和EndDate
属性。
答案 0 :(得分:1)
在您为Timespan
属性分配任何值之前,此处的默认(即无参数)构造函数无法正常运行。删除它,其他构造函数应该可以正常工作。
但是,您似乎将此对象用作MVC参数,因此没有无参数构造函数不会起作用。你可以这样做:
public DateTime StartDate
{
get { return DateTime.Parse(Timespan.Substring(0, 10)); }
}
public DateTime EndDate
{
get { return DateTime.Parse(Timespan.Substring(12)); }
}
或者,如果您打算稍后修改开始/结束日期属性,则可以执行以下操作:
private string _timespan;
public string Timespan
{
get { return _timespan; }
set
{
_timespan = value;
StartDate = DateTime.Parse(Timespan.Substring(0, 10));
EndDate = DateTime.Parse(Timespan.Substring(12));
}
}