我一直在圍繞這個問題大肆討論。我有一個圍繞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在表單標籤創建後並不爲空,而且這部分看起來很好。
任何幫助/建議將不勝感激。
謝謝
全名是modelTemplateString.cshtml。問題不在於我的自定義模板無法正常工作。它實際上是在渲染它。不工作的是MVC的默認模板沒有渲染任何標記。 – user1428857
我是否正確地假設你的LastName字段只是一個基本的String對象? –
是的,你是對的。很簡單的是,即使它是一個字符串,當我進入我的自定義模板時,我仍然可以從它獲取適當的ModelMetadata(在屬性所屬的模型的上下文中)。不完美的是,我無法使用ValidateFor和EditorFor – user1428857