Я изо всех сил пытаюсь отобразить водяной знак (так называемый 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, установленного в свойстве моей модели представления.
...
...
Что мне здесь не хватает? Я действительно пытался создать оба шаблона редактора (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 })
?