我发现自己在观点中写了很多这样的内容:
<%= link_to "My document", @ticket.attachment.url, target: "_blank" %>
我真的很想把它放在Partial <div class="form-group">
@Html.LabelFor(x => x.City)
@Html.EditorFor(x => x.City)
@Html.ValidationMessageFor(x => x.City)
</div>
中,就像这样:
_Field.cshtml
然后可以通过以下方式调用:
@model //what model type???
<div class="form-group">
@Html.LabelFor(Model)
@Html.EditorFor(Model)
@Html.ValidationMessageFor(Model)
</div>
如果我想完成这样的事情,我的部分@Html.Partial("_Field", x => x.City)
类型会是什么?
更新这样可行,但我更倾向于使用部分内容来更改模板:
@model
答案 0 :(得分:3)
那是不可能的。但是,您想要的与编辑器模板非常相似。基本上,您只需在Views/Shared/EditorTemplates
中创建一个以下列约定之一命名的视图:
DataType
枚举的成员之一(EmailAddress.cshtml,Html.cshtml,PhoneNumber.cshtml等)。然后,您可以将适当的DataType
属性应用于您的属性:
[DataType(DataType.EmailAdress)]
public string Email { get; set; }
您想要的任何内容,以及UIHint
属性:
[UIHint("Foo")]
public string Foo { get; set; }
这将对应于Foo.cshtml编辑器模板
在您的观看中,您只需使用Html.EditorFor
:
@Html.EditorFor(x => x.City)
然后,例如,您可以将Views/Shared/EditorTemplates/String.cshtml
作为:
<div class="form-group">
@Html.Label("", new { @class = "control-label" })
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "form-control" })
@Html.ValidationMessage("")
</div>
(空引号是占位符。谢天谢地,Razor会自动填写相应的属性名称。)
然后,调用EditorFor
将打印所有这些内容,而不仅仅是默认文本输入。你也可以更进一步。如果您有兴趣,我的博客上有some articles更详细的内容。
<强>更新强>
值得一提的是EditorFor
的一些功能:
您可以直接将模板传递给调用,这意味着您可以自定义实时使用的模板:
@Html.EditorFor(x => x.City, "MyCustomEditorTemplate")
您可以传递additionalViewData
。此匿名对象的成员将添加到ViewData
动态字典中。您可以使用它在编辑器模板中进行分支以涵盖其他方案。例如:
@Html.EditorFor(x => x.City, new { formGroup = false })
然后在你的编辑器模板中:
@{ var formGroup = ViewData["formGroup"] as bool? ?? true; }
@if (formGroup)
{
<!-- Bootstrap form group -->
}
else
{
<!-- Just the input -->
}