2012-05-31 4 views
1

Я пробовал свой мозг вокруг этой проблемы. У меня есть унаследованное приложение, построенное вокруг 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 не был пустым после создания тега формы, и эта часть кажется прекрасной.

Любая помощь/предложения были бы весьма признательны.

Благодаря

ответ

0

Какие полные имена файлов для ваших шаблонов редактора в папке/Shared/EditorTemplates?

Символ @ Html.EditorFor (м => m.SectionData.Data.LastName), вероятно, будет вызовом String.cshtml и на другой адрес должен быть назван modelTemplateString.cshtml

вы также хотите, чтобы убедиться, что тег @model String находится в верхней части шаблонов вашего редактора

Из того, что я вижу, ваш шаблон не использует данные модели, которые вы отправляете на него, просто используя объект ViewData.

+0

Полное имя - modelTemplateString.cshtml. Проблема заключается не в том, что мой пользовательский шаблон не работает. Это на самом деле его рендеринг. То, что не работает, - это шаблоны по умолчанию из MVC, не отображающие разметку. – user1428857

+0

Правильно ли я полагаю, что ваше поле LastName является только базовым объектом String? –

+0

Да, вы правы. Что является опрятным, так это то, что даже если это строка, когда я попадаю в свой собственный шаблон, я все равно могу получить из него подходящую ModelMetadata (в контексте модели, к которой относится свойство). Что не из того, что я не могу использовать ValidateFor и EditorFor – user1428857