自定义渲染与不引人注目的验证,不工作,为什么?

时间:2011-10-03 19:23:54

标签: asp.net-mvc

我试图做一个小的渲染框架,因为我需要对渲染过程有更多的控制。 FX。如果需要在选项卡中呈现属性。

所以我开始渲染一个TextBox,但它没有验证服务器端或客户端验证(MVC不引人注意的验证)

我已经取出了我的框架,并重新创建了一个小eksampel

  public class Foo
    {
        public virtual int Id { get; set; }

        [System.ComponentModel.DataAnnotations.Required]
        public virtual string Name { get; set; }

        public virtual DateTime StartTime { get; set; }
    }

我的扩展方法:

    public static MvcHtmlString DummyForm(this HtmlHelper html)
    {
        StringBuilder sb = new StringBuilder();

        Type oftype = typeof(Foo); 
        string[] propertyNameToRender = oftype.GetProperties().Select(o => o.Name).ToArray();

        foreach (string s in propertyNameToRender)
        {
            MvcHtmlString htmlstring = System.Web.Mvc.Html.InputExtensions.TextBox(html, s);
            sb.AppendLine(htmlstring.ToHtmlString());
        }

        return MvcHtmlString.Create(sb.ToString());
    }

在Edit.cshtml上

    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true);
    @Html.DummyForm() 
}

如果我查看渲染的html输出,它是相同的(没有验证attri) 任何人都可以告诉我,为什么没有渲染验证attri。

我使用mvc自己的渲染控件,从视图传递HtmlHelper,包含所有ModelMetadata和ModelState。

3 个答案:

答案 0 :(得分:2)

初始化data-val-*时会呈现不显眼的验证FormContext属性。 Html.BeginForm这样做,所以

@using (Html.BeginForm())
{
   @Html.DummyForm() 
}

应使用验证属性呈现输入。

答案 1 :(得分:1)

有一件事情似乎很奇怪,你自己正在调用System.Web.Mvc.Html.InputExtensions.TextBox方法。此方法由Html.TextBox和其他强类型扩展在内部调用。请尝试更改

MvcHtmlString htmlstring = System.Web.Mvc.Html.InputExtensions.TextBox(html, s);

MvcHtmlString htmlstring = html.TextBox(s);

答案 2 :(得分:1)

我尝试创建一个新的ASP.net MVC站点,并添加了我的RenderProject代码,它工作正常。结论是我的asp.net MVC项目搞砸了。我不知道为什么。 :S