当首先使用带有数据注释的 MVC 代码时,如何在显示名称中包含 html 标记?

Posted

技术标签:

【中文标题】当首先使用带有数据注释的 MVC 代码时,如何在显示名称中包含 html 标记?【英文标题】:When using MVC code first with data annotations how do you include html markup in the display name? 【发布时间】:2013-04-04 23:31:30 【问题描述】:

我正在将纸质表单转换为 MVC 4 网络表单。我的问题是一段包含链接到脚注的上标数字的文本。这就是我想要做的:

public class PaperFormModel

    [Display(Name = "Full paragraph of question text copied straight 
         off of the paper form<a href="#footnote1"><sup>footnote 1</sup></a> 
         and it needs to include the properly formatted superscript 
         and/or a link to the footnote text.")]
    public string Question1  get; set; 

    // more properties go here ...

创建模型后,我生成了控制器和相关视图。除了显示名称中的 html 标记被转换为 html 编码文本(即 <sup>1</sup>)外,一切正常。 view.cshtml中用于显示属性的代码就是自动生成的代码:

<div class="editor-label">
    @Html.LabelFor(model => model.Question1)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Question1)
    @Html.ValidationMessageFor(model => model.Question1)
</div>

我正在尝试弄清楚如何让脚注的 html 标记正常工作,或者我的方法是否有些错误,我应该以不同的方式来做?这是我的第一个 MVC 项目,我来自 asp.net 背景。

【问题讨论】:

【参考方案1】:

我认为你应该尝试将你的 HTML 文本移动到资源中并为你的模型申请下一个代码:

public class PaperFormModel
    
    [Display(ResourceType = typeof(PaperFormModelResources), Name = "Question1FieldName")]
    public string Question1  get; set; 

    // more properties go here ...

创建资源文件: - 如果Resources 文件夹不存在,请在您的解决方案中创建它。 - Right click on this folder in solution explorer -&gt; Add -&gt; Resource file... -&gt; Add -&gt; New item 并选择 resource file - 将此文件命名为PaperFormModelResources - 使用资源管理器添加名称为Question1FieldName 和值为Full paragraph of question text copied straight off of the paper form&lt;a href="#footnote1"&gt;&lt;sup&gt;footnote 1&lt;/sup&gt;&lt;/a&gt; and it needs to include the properly formatted superscript and/or a link to the footnote text. 的新条目。

编辑: 如果结果是您的 html 标记没有正确显示(它只是显示为纯文本),您可以使用this question 的答案,即:

<div class="editor-label">
    @Html.Raw(HttpUtility.HtmlDecode(Html.LabelFor(model => model.Question1).ToHtmlString))
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Question1)
    @Html.ValidationMessageFor(model => model.Question1)
</div>

希望对您有所帮助。

【讨论】:

如果您将 '@Html.Raw(HttpUtility...' 部分放入自己的答案中,我会将其标记为答案。 @Bakanekobrain,我已经在回答中应用了这些更改以适合您的问题:@Html.Raw(HttpUtility.HtmlDecode(Html.LabelFor(model =&gt; model.Question1).ToHtmlString)) ToHtmlString 是一个方法调用,所以需要括号。

以上是关于当首先使用带有数据注释的 MVC 代码时,如何在显示名称中包含 html 标记?的主要内容,如果未能解决你的问题,请参考以下文章

如何在MVC应用程序中使用Jquery

带有注释的 Spring MVC 验证

使用 ajax 和 mvc 提交带有照片数据的表单

当缺少某些值时,如何在烛台图表中添加带有注释的线条?

.NET 4 MVC 2 验证,带有注释警告而不是错误

带有 @PathVariable 的 Spring MVC 带注释的控制器接口