2011-10-03 37 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)中它是什麼。希望對你感覺:) –