Я изо всех сил пытаюсь отобразить водяной знак (так называемый заполнитель) на входах формы MVC3.
Здесь уже есть несколько постов, в том числе довольно сфокусированный:
Заполнители HTML5 с расширением .NET MVC 3 Razor EditorFor? а>
В этих сообщениях даются советы по созданию измененных шаблонов html.TextBox. В моем случае мое преимущество в том, что мне не нужны какие-либо шаблоны редактора, поскольку я настраиваю их в процессе работы.
Лучше, чем долгие разговоры, вот соответствующая часть фактического кода:
~/Модели/myModel.cs
namespace myProject.Models {
public class myFormModel {
...
[Display(Name = "firstFieldName", Prompt = "firstFieldPrompt")]
public string firstFieldValue { get; set; }
...
}
}
~/Контроллеры/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<string, object> { { "class", "myFormStyle" }, { "id", "myFormId" } }))
{
...
@Html.TextBoxFor(x => x.firstFieldValue, new { @class = "myInputStyle", @placeholder = ViewData.ModelMetadata.Watermark })
...
}
}
В результате HTML-тег-заполнитель правильно отображается на моей отображаемой веб-странице, но он пуст, хотя тег Name заполнен правильно, даже без украшения DisplayName, установленного в свойстве моей модели представления.
...
<input type="text" value="" placeholder="" name="firstFieldName" id="firstFieldName" class="myInputStyle">
...
Что мне здесь не хватает? Я действительно пытался создать оба шаблона редактора (MultilineText и String) в правильной папке (~/Views/Shared/EditorTemplates/), но я предполагаю, что они никогда не вызываются, поскольку я использую «Html.TextBoxFor», а не «Html. Текстовое окно"...
Другое дело, если я удалю «@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 })
?