2012-05-31 67 views
1

我一直在圍繞這個問題大肆討論。我有一個圍繞ASP.NET中的WebSite構建的遺留應用程序。我添加了適當的東西來允許向其添加MVC,並且它主要正常工作。ASP.NET MVC3 TextBoxFor,EditorFor,ValidateFor not rendering

我有一個剃鬚刀視圖,它有一個表格標籤(封裝在Html.BeginForm中)。我還爲字符串創建了一個自定義模板編輯器。我遇到的問題是,當我想呈現普通文本框,editorfor或ValidateFor,ValidationSummary時,不會生成標記。我的自定義模板被執行,但任何正常的HtmlHelper似乎都不起作用。

這是我的看法(它是一個局部視圖)

@model L1.Web.UI.Infrastructure.SectionWrapper<L1.Web.ViewModel.PersonInfoViewModel> 

<div class="section"> 
    @using (Html.BeginForm()) 
    { 
     <div class="pad_10" data-bind="with: sections['PersonInfo']"> 
     <div data-bind="with: data"> 
      @Html.ValidationSummary(true) 
      <table class="full-table form-horizontal"> 
       <tbody> 
        <tr> 
        <td width="30%" class="dotted-border-right"> 
<!-- This kinda work --> 
        @Html.EditorFor(m => m.SectionData.Data.LastName,  
         "modelTemplateString", 
         new {SectionName = "PersonInfo"}) 
!-- This doesn't render anything --> 
        @Html.EditorFor(m => m.SectionData.Data.LastName) 

在我的自定義模板,我呈現純HTML,它的工作原理。當我在我的自定義模板中執行EditorFor時,它部分起作用。我沒有看到任何正在生成的驗證屬性。我的自定義模板中的ValidateFor或ValidationMessageFor也不會生成任何標記。這裏是我的自定義模板的代碼(位於/共享/ EditorTemplates)

@inherits WebViewPage<string> 

<div class="control-group"> 
<label class="control-label" for="@String.Format("input{0}", ViewData.ModelMetadata.PropertyName)" data-bind="localized: {resourceId: '@ViewData.ModelMetadata.PropertyName', resourceStore: $root}"></label> 
<div class="controls"> 
    <input id="@String.Format("input{0}", ViewData.ModelMetadata.PropertyName)" class="input-small" type="text" data-bind="visible: $root.sectionDefinitions['@ViewData["SectionName"]'].isEditing, value: @ViewData.ModelMetadata.PropertyName"/> 
    <a class="edit-link" data-bind="visible: $root.sectionDefinitions['@ViewData["SectionName"]'].isInReadMode"> 
     <strong data-bind="text: @ViewData.ModelMetadata.PropertyName"></strong> 
    </a> 
    @{ Html.ValidateFor(m => m); } 
</div> 

我也試圖從項目中完全刪除我的自定義模板,以爲它總是使用,即使沒有在EditorFor中指定自定義模板名稱。這沒有什麼區別。看起來我的項目部分無法呈現任何HtmlHelpers。

我也檢查過ViewContext.FormContext在表單標籤創建後並不爲空,而且這部分看起來很好。

任何幫助/建議將不勝感激。

謝謝

回答

0

什麼是/ Shared/EditorTemplates文件夾中編輯器模板的完整文件名?

的@ Html.EditorFor(M => m.SectionData.Data.LastName)可能會被調用String.cshtml和您的其他人應該被稱爲modelTemplateString.cshtml

,你也將要確保@model字符串標籤位於編輯器模板的頂部

從我可以看到您的模板不是真正使用您發送給它的模型數據,它只是使用ViewData對象。

+0

全名是modelTemplateString.cshtml。問題不在於我的自定義模板無法正常工作。它實際上是在渲染它。不工作的是MVC的默認模板沒有渲染任何標記。 – user1428857

+0

我是否正確地假設你的LastName字段只是一個基本的String對象? –

+0

是的,你是對的。很簡單的是,即使它是一個字符串,當我進入我的自定義模板時,我仍然可以從它獲取適當的ModelMetadata(在屬性所屬的模型的上下文中)。不完美的是,我無法使用ValidateFor和EditorFor – user1428857