ModelMetadata.Watermark и MVC View Models

Я изо всех сил пытаюсь отобразить водяной знак (так называемый placeholder) на моих входных данных формы MVC3.

Здесь уже есть несколько сообщений, в том числе весьма целенаправленный здесь:

Заполнители Html5 с расширением .NET MVC 3 Razor EditorFor?

В этих постах даются советы по созданию измененных шаблонов html.TextBox. В моем случае моим преимуществом является то, что мне не нужны какие-либо шаблоны редактора, поскольку я настраиваю их в процессе работы.

Лучше долгих разговоров, вот соответствующая часть фактического кода:

~/Models/myModel.cs

namespace myProject.Models {
  public class myFormModel {
    ...
    [Display(Name = "firstFieldName", Prompt = "firstFieldPrompt")]
    public string firstFieldValue { get; set; }
    ...
  }
}

~/Controllers/myFormSurfaceController.cs

namespace myProject.Controllers {
  public class myFormSurfaceController : SurfaceController {
    ...
    [ChildActionOnly]
    public PartialViewResult myForm()
    {
        return PartialView("myPartialView", new myFormModel());
    }
    ...
    [HttpPost, ValidateAntiForgeryToken]
    public ActionResult handleMyFormSubmit(myFormModel model) {...}
    ...
  }
}

~/Views/myProject/Partial/myPartialView .cshtml

@model myFormModel
@{      
  using (Html.BeginUmbracoForm("handleMyFormSubmit", "myFormSurface", null, new Dictionary { { "class", "myFormStyle" }, { "id", "myFormId" } }))
  {
    ...
    @Html.TextBoxFor(x => x.firstFieldValue, new { @class = "myInputStyle", @placeholder = ViewData.ModelMetadata.Watermark })
    ...
  }
}

В результате HTML-тег-заполнитель правильно отображается на моей отображаемой веб-странице, но он пуст, хотя тег Name заполнен правильно, даже без декоративного оформления DisplayName, установленного в свойстве моей модели представления.

http://localhost/testpage

...

...

Что мне здесь не хватает? Я действительно пытался создать оба шаблона редактора (MultilineText и String) в правильной папке (~/Views/Shared/EditorTemplates/), но я предполагаю, что они никогда не вызываются, поскольку я использую «Html.TextBoxFor», а не «Html. TextBox"...

Другое дело, если я удалю "@placeholder = ViewData.ModelMetadata.Watermark" из вызова @Html.TextBoxFor, у меня не будет никакого "заполнителя", отображаемого на отображаемой веб-странице.Что хорошо, эта часть звонка определенно в порядке.

Заранее спасибо за любую помощь по этому вопросу...

Николя.

Редактировать:

А если я создам больше переменных в своей модели.

Например:

public string firstFieldPrompt { get { return "bla"; } set { } } 

и затем

@Html.TextBoxFor(x => x.firstFieldValue, new { @class = "myInputStyle", @placeholder = x => x.FirstFieldPrompt })

?

5
задан Community 23 May 2017 в 12:17
поделиться