加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ModelMetadata.Watermark和MVC View Models

发布时间:2020-12-16 07:34:10 所属栏目:asp.Net 来源:网络整理
导读:我正在努力在我的MVC3表单输入上显示水印(所谓的占位符). 这里的帖子已经很少了,包括这里非常专注的帖子: Html5 Placeholders with .NET MVC 3 Razor EditorFor extension? 在这些帖子中,建议创建调整的html.TextBox模板. 在我的情况下,我的资产是我不需要
我正在努力在我的MVC3表单输入上显示水印(所谓的占位符).

这里的帖子已经很少了,包括这里非常专注的帖子:

Html5 Placeholders with .NET MVC 3 Razor EditorFor extension?

在这些帖子中,建议创建调整的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) {...}
    ...
  }
}

?/查看/ 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 })
    ...
  }
}

结果是占位符html标记在我渲染的网页上正确显示,但是尽管名称标记已正确填充,但即使没有在我的视图模型属性上设置DisplayName装饰,它也是空的.

http://localhost/testpage

...
<input type="text" value="" placeholder="" name="firstFieldName" id="firstFieldName" class="myInputStyle">
...

我在这里错过了什么?我确实尝试在正确的文件夹(?/ Views / Shared / EditorTemplates /)中创建两个编辑器模板(MultilineText和String),但我认为它们从未被调用,因为我使用的是“Html.TextBoxFor”而不是“Html”.文本框”…

另外,如果从@Html.TextBoxFor调用中删除“@placeholder = ViewData.ModelMetadata.Watermark”,我在渲染的网页上没有显示任何“占位符”.哪个好,这部分电话肯定没问题.

在这一点上提前感谢任何帮助……

尼古拉斯.

编辑:

如果我在模型中创建更多变量怎么办?

例如:

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

然后

@Html.TextBoxFor(x => x.firstFieldValue,@placeholder = x => x.FirstFieldPrompt })

解决方法

你得到一个空水印的原因是在你的情况下(即不使用模板)ViewData实际上是指myFormModel(而不是myFormModel.firstFieldValue);您实际上是在检索视图模型的水印.由于模型不能有水印([Display]不能应用于类)ViewData.ModelMetadata.Watermark对于视图始终为空.

据我所知,你唯一的选择(如果你不想使用模板)是内联水印:

@Html.TextBoxFor(x => x.firstFieldValue,placeholder = "Your watermark text here" })

顺便说一句,如果想要使用模板,则需要使用模板化助手@ Html.EditorFor()和@ Html.DisplayFor(). @ Html.TextBoxFor()只是@ Html.TextBox()的强类型版本.它不是模板化的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读