2011-10-26 34 views
2

我在Visual Studio 2010中使用了Sharepoint 2010 ..自定義字段。驗證自定義Sharepoint字段是否爲空?

我創建了一個自定義字段。這個特定的日期時間字段(「終止日期」)。如果它是空白並且另一個字段(「合同終止」等於是),我希望它驗證失敗。

所以我以前做過這個計算字段。而且,它的工作原理,但它將驗證錯誤放在編輯窗體的頂部,而不是在我希望它的「終止日期」字段旁邊。就像通常情況下,如果字段未在自定義字段中使用GetValidatedString進行驗證。

所以,因爲它在錯誤的地方,我做了一個自定義字段。但是因爲日期是空白的,所以它從不碰到GetValidatedString方法。我錯過了什麼嗎?如果「終止日期」欄位爲空白,是否有另一種方法可使驗證失敗並在「終止日期」字段旁邊?

我嘗試使用事件接收器解決方案..也有問題,它也會把錯誤消息放在頂部..不是在終止日期字段旁邊。

對此提出建議?

回答

2

對於自定義字段,您可以覆蓋FieldRenderingControl,編寫自己的FieldControl。如果你不使用行蹤列表此自定義字段,你可以從DateTimeField繼承了你fieldcontrol並覆蓋Validate方法如:

public override void Validate() 
{ 
    base.Validate(); 
    if (IsValid) 
    { 
     if (!(your validation)) 
     { 
      IsValid = false; 
      ErrorMessage = 「youe message」; 
     } 
    } 
} 
+0

確定..我會查找如何做到這一點。我添加了以下.. 1,對System.Web 2的引用,使用Microsoft.SharePoint.WebControls; 3,覆蓋:public override BaseFieldControl FieldRenderingControl {get {return base.FieldRenderingControl; }} ...但我仍然會看起來寫我自己的字段控制..我希望你的建議是寫,它會讓我把valdate一個emtpy日期字段... –

+0

公共覆蓋BaseFieldControl FieldRenderingControl { get { BaseFieldControl control = null; control = new YourDateTimeField();/*繼承自DateTimeField */ control.FieldName = base.InternalName; 返回控制; } } – MishaU

+0

看起來像你說的把它放在自定義字段類中.. mine是TerminationDateValidation.cs ..它繼承自SPFieldDateTime ..(類TerminationDateValidation:SPFieldDateTime)...但是當我使用這一行時:control =新的YourDateTimeField();我得到錯誤,它不需要0參數..它需要字段,字段名..如果我使用這些確切的參數..像(ieldControl = new TerminationDateValidation(fields,fname);)..然後它說這些參數不' t存在於當前上下文中。 –