2011-04-02 35 views
1

我正在動態呈現一些輸入控件。我寫了一個方法,像這樣動態呈現MVC 3驗證不起作用

 public override MvcHtmlString GetActionControl(HtmlHelper<ItemDetailsViewModel> helper) 
     { 
     return 
      helper.EditorFor(A => A.Triage.ProcessNumber) + 
      helper.ValidationMessageFor(a => a.Triage.ProcessNumber, "*") 
     } 

而且我從這樣的主要CSTHML文件調用此:

<!-- Render Action Controls for each possible action --> 
@foreach (IActionControl iac in WorkflowActionControls.GetActionControls(Model.WorkflowItem.CurrentState)) 
{ 
    <div id="@("div" + iac.ControlName)" class="ui-corner-all ui-widget ui-widget-content" style="margin-top: 24px; padding: 15px;"> 
     @iac.GetActionControl(this.Html) 
    </div> 
} 

請注意,我傳遞當前的HtmlHelper到GetActionControl()方法。

問題是,所生成的輸出是僅:

<input class="text-box single-line" id="Triage_ProcessNumber" name="Triage.ProcessNumber" type="text" value="" /> 

即,沒有 「擴展」 的驗證字段和沒有驗證。此外,我發現helper.ValidationMessageFor()方法返回NULL。

但是,如果我把編輯器和validationMessage在.cshtml直接的一切就像一個魅力:

@Html.EditorFor(a => a.Triagem.ProcessNumber) 
@Html.ValidationMessageFor(a => a.Triagem.ProcessNumber, "*") 

什麼我錯在這裏做什麼?不應該調用HtmlHelper.EditorFor的最終結果是一樣的嗎?對不起,如果這是一個蹩腳的問題,但沒有太多關於MVC 3動態生成HTML標記的信息。

我檢查了常見的陷阱,一切都正常:在web.config上啓用驗證,模型類有適當的驗證屬性等

任何幫助,將不勝感激:)

PS:我已經簡化粘貼代碼中省略形式。

回答

3

我不知道這是否會對您有所幫助,但驗證是在Html.ViewContext.FormContext不爲空時呈現的。當我有同樣的問題,我剛剛初始化形式上下文與new FormContext();和它的工作

+1

它的工作,你是人間的上帝! – tggm 2011-04-02 22:59:39

+0

令人印象深刻!非常感謝 – 2012-03-22 02:08:59