我试图做一个小的渲染框架,因为我需要对渲染过程有更多的控制。 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。
答案 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