2014-11-04 79 views
0

我有很多控制器從輸入值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 值始終爲空。這是可能的還是有其他方式來重構呢?

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屬性。

+0

你是什麼意思:「添加到其他財產」 ?什麼屬性? – Tigran 2014-11-04 13:24:29

+1

什麼時候您的屬性命名爲Timespan集? – ken2k 2014-11-04 13:24:34

+0

「StartDate」和「EndDate」屬性是隻讀的嗎?如果是這樣,你可以在有人訪問時進行解析。 – juharr 2014-11-04 13:30:51

回答

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)); 
    } 
} 
+0

啊,謝謝!這就是我所追求的,第一個例子對我來說足夠好。我的代碼的問題是第二個構造函數從來沒有被擊中,只有第一個是空的。 – Niklas 2014-11-04 13:48:03