我有一个动态视图,这将显示已传递给它的任何模型。
@model dynamic
@using (Html.BeginForm("Edit", null, FormMethod.Post, new { id="FrmIndex" }))
{
@Html.ValidationSummary(true);
@Html.EditorForModel()
<input type="submit" value="Edit" />
}
假设我的一个模型是PartyRole
public partial class PartyRole
{
[Key, Display(Name = "Id"]
[UIHint("Hidden")]
public int PartyRoleId { get; set; }
[UIHint("TextBox")]
public string Title { get; set; }
}
我不想在编辑模式下显示Id,所以我将它隐藏在Hidden.cshtml editorfortemplate中,如下所示:
@Html.HiddenFor(m => Model)
这是隐藏编辑器,但不是标签“Id”。 我无法使用此处提供的答案How to exclude a field from @Html.EditForModel() but have it show using Html.DisplayForModel()
因为IMetadataAware需要System.Web.Mvc命名空间,我无法在拥有poco模型类的Biz项目中添加它。 我也不能使用[HiddenInput(DisplayValue = false)],因为这也是web.mvc的派对
有人可以提供解决方案吗?
答案 0 :(得分:2)
我认为要做的是创建自定义Object.cshtml
编辑器模板,如
http://www.headcrash.us/blog/2011/09/custom-display-and-editor-templates-with-asp-net-mvc-3-razor/
(nb。我发现How to add assembly in web.config file of mvc 4对System.Data.EntityState
引用有帮助。)
在该模板中,您可以输入适当的代码来隐藏标签。以下是一个愚蠢的例子 - 我想我可能会尝试选择一个自定义属性,但显然这会涉及DataAnnotationsModelMetadataProvider
的重载。
if (prop.HideSurroundingHtml)
{
@Html.Editor(prop.PropertyName)
}
else if (prop.PropertyName == "PartyRoleId")
{
<div></div>
}
else if (!string.IsNullOrEmpty(Html.Label(prop.PropertyName).ToHtmlString()))
{
<div class="editor-label">@Html.Label(prop.PropertyName)</div>
}