创建类时修改属性

时间:2014-11-04 13:21:33

标签: c# jquery asp.net-mvc

我有很多控制器从输入值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对象时在构造函数中设置StartDateEndDate属性。

1 个答案:

答案 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));
    }
}