Я пробовал свой мозг вокруг этой проблемы. У меня есть унаследованное приложение, построенное вокруг WebSite в ASP.NET. Я добавил правильные вещи, чтобы добавить к нему MVC, и это в основном работает правильно.ASP.NET MVC3 TextBoxFor, EditorFor, ValidateFor not rendering
У меня есть вид бритвы, в котором есть тег формы (инкапсулированный внутри Html.BeginForm). Я также создал собственный редактор шаблонов для строки. Проблема, с которой я сталкиваюсь, заключается в том, что когда я хочу отображать обычный текстовый ящик, редактор или 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, который работает. Когда я делаю редактор в моем настраиваемом шаблоне, он частично работает. Я не вижу никаких генерируемых атрибутов проверки. ValidateFor или ValidationMessageFor в моем настраиваемом шаблоне не генерирует никакой разметки. Вот код в моем шаблоне (который находится в каталоге/Shared/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>
Я также попытался удалить свой собственный шаблон из проекта полностью, думая, что это было всегда, даже когда не указывая имя настраиваемого шаблона в редакторе. Это не имело никакого значения. Похоже, что мой проект частично не может отобразить HtmlHelpers.
Я также проверил, что ViewContext.FormContext не был пустым после создания тега формы, и эта часть кажется прекрасной.
Любая помощь/предложения были бы весьма признательны.
Благодаря
Полное имя - modelTemplateString.cshtml. Проблема заключается не в том, что мой пользовательский шаблон не работает. Это на самом деле его рендеринг. То, что не работает, - это шаблоны по умолчанию из MVC, не отображающие разметку. – user1428857
Правильно ли я полагаю, что ваше поле LastName является только базовым объектом String? –
Да, вы правы. Что является опрятным, так это то, что даже если это строка, когда я попадаю в свой собственный шаблон, я все равно могу получить из него подходящую ModelMetadata (в контексте модели, к которой относится свойство). Что не из того, что я не могу использовать ValidateFor и EditorFor – user1428857