use*_*337 5 forms asp.net-mvc watermark placeholder
我正在努力在我的MVC3表单输入上显示水印(所谓的占位符).
这里的帖子已经很少了,包括这里非常专注的帖子:
使用.NET MVC 3 Razor Editor进行扩展的Html5占位符?
在这些帖子中,建议创建调整的html.TextBox模板.在我的情况下,我的资产是我不需要任何编辑器模板,因为我正在内联调整它们.
比长谈更好,这是实际代码的相关部分:
〜/型号/ myModel.cs
namespace myProject.Models {
public class myFormModel {
...
[Display(Name = "firstFieldName", Prompt = "firstFieldPrompt")]
public string firstFieldValue { get; set; }
...
}
}
Run Code Online (Sandbox Code Playgroud)
〜/控制器/ 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) {...}
...
}
}
Run Code Online (Sandbox Code Playgroud)
〜/查看/ myProject的/部分/ 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 })
...
}
}
Run Code Online (Sandbox Code Playgroud)
结果是占位符html标记在我渲染的网页上正确显示,但是尽管名称标记已正确填充,但即使没有在我的视图模型属性上设置DisplayName装饰,它也是空的.
...
<input type="text" value="" placeholder="" name="firstFieldName" id="firstFieldName" class="myInputStyle">
...
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?我确实尝试在正确的文件夹(〜/ Views/Shared/EditorTemplates /)中创建两个编辑器模板(MultilineText和String),但我认为它们从未被调用,因为我使用的是"Html.TextBoxFor"而不是"Html".文本框"...
另外,如果从@Html.TextBoxFor调用中删除"@placeholder = ViewData.ModelMetadata.Watermark",我在渲染的网页上没有显示任何"占位符".哪个好,这部分电话肯定没问题.
在这一点上提前感谢任何帮助......
尼古拉斯.
编辑:
如果我在模型中创建更多变量怎么办?
例如:
public string firstFieldPrompt { get { return "bla"; } set { } }
Run Code Online (Sandbox Code Playgroud)
然后
@Html.TextBoxFor(x => x.firstFieldValue, new { @class = "myInputStyle", @placeholder = x => x.FirstFieldPrompt })
Run Code Online (Sandbox Code Playgroud)
?
小智 9
我意识到这是一个旧手,但您可以在视图中使用ModelMetadata.FromLambdaExpression()方法(不使用模板),即
@Html.TextBoxFor(x => x.firstFieldValue,
new {
@class = "myInputStyle",
@placeholder = ModelMetadata.FromLambdaExpression(x => x.firstFieldValue, ViewData).Watermark
})
Run Code Online (Sandbox Code Playgroud)
希望这有助于某人:-)
你得到一个空水印的原因是在你的情况下(即不使用模板)ViewData实际上是指myFormModel(不myFormModel.firstFieldValue); 您实际上是在检索视图模型的水印.由于模型不能有水印([Display]不能应用于类)ViewData.ModelMetadata.Watermark,因此视图始终为空.
据我所知,你唯一的选择(如果你不想使用模板)是内联水印:
@Html.TextBoxFor(x => x.firstFieldValue, new { @class = "myInputStyle", placeholder = "Your watermark text here" })
Run Code Online (Sandbox Code Playgroud)
顺便说一下,如果想要使用模板,则需要使用模板化帮助器@Html.EditorFor()和@Html.DisplayFor().@Html.TextBoxFor()只是强类型的版本@Html.TextBox().它不是模板化的.
| 归档时间: |
|
| 查看次数: |
5959 次 |
| 最近记录: |