动态呈现的MVC 3验证不起作用

时间:2011-04-02 19:05:30

标签: c# asp.net-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:我简化了粘贴代码并省略了表单。

1 个答案:

答案 0 :(得分:3)

我不知道这是否会对您有所帮助,但在Html.ViewContext.FormContext不为空时会进行验证。当我遇到同样的问题时,我只是使用new FormContext();初始化表单上下文并且它有效