2011-10-03 65 views
1

我试图做一点渲染框架,因为我需要更多的控制渲染过程。 FX。如果一个属性需要在选项卡中呈现。自定义渲染与不显眼的验证,不工作,为什么?

所以我下决心,呈现一个文本框,但它不与服务器端或客户端验证(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。

回答

1

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

2

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

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

应该呈现具有验证属性的输入。

+0

嗨 我也试过了。同样的结果。 我已经编辑了我的顶级帖子,所以你可以选择我的表单上下文。 –

1

有一件事似乎很奇怪,你自己打电话给System.Web.Mvc.Html.InputExtensions.TextBox方法。此方法在内部由Html.TextBox和其他强类型的扩展名调用。 PLZ尝试改变

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

MvcHtmlString htmlstring = html.TextBox(s); 
+0

我需要更多的控制渲染,当我传入一个模型,我需要启用呈现一个属性作为下拉,一个作为输入和许多我需要呈现它在一个标签。这种形式的控制,现在不在MVC框架中,还是我错过了一些东西? 所以我该怎么做Render方法的调用,但我对框架说什么,我需要这个箱子类型和我在这个标签(jquery)中它是什么。希望对你感觉:) –