首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用非侵入性验证的自定义渲染,不起作用,为什么?

使用非侵入性验证的自定义渲染,不起作用,为什么?
EN

Stack Overflow用户
提问于 2011-10-04 03:23:54
回答 3查看 445关注 0票数 1

我正在尝试做一个小的渲染框架,因为我需要对渲染过程进行更多的控制。Fx。是否需要在选项卡中呈现属性。

所以我开始渲染一个TextBox,但它不能用服务器端或客户端验证( MVC非侵入性验证)。

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

代码语言:javascript
复制
  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; }
    }

我的扩展方法:

代码语言:javascript
复制
    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上

代码语言:javascript
复制
    <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自己的渲染控件,所有的ModelMetadata和ModelState都是从视图传递的HtmlHelper。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-08 20:57:38

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

票数 1
EN

Stack Overflow用户

发布于 2011-10-04 03:45:29

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

代码语言:javascript
复制
@using (Html.BeginForm())
{
   @Html.DummyForm() 
}

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

票数 2
EN

Stack Overflow用户

发布于 2011-10-04 12:29:48

有一件事看起来很奇怪,那就是你自己在调用System.Web.Mvc.Html.InputExtensions.TextBox方法。此方法由Html.TextBox和其他强类型扩展在内部调用。请尝试更换

代码语言:javascript
复制
MvcHtmlString htmlstring = System.Web.Mvc.Html.InputExtensions.TextBox(html, s);

代码语言:javascript
复制
MvcHtmlString htmlstring = html.TextBox(s);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7639643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档