在动态视图中隐藏模型的属性
本文关键字:模型 属性 隐藏 动态 视图 | 更新日期: 2023-09-27 18:24:44
我有一个动态视图,它将显示传递给它的任何模型。
@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编辑器模板中,如下所示:
@Html.HiddenFor(m => Model)
这是隐藏编辑器,但不是隐藏标签"Id"。我不能使用这里提供的答案,如何从@Html.EditForModel()中排除字段,但使用Html.DisplayForModel(
因为IMetadataAware需要System.Web.Mvc命名空间,我无法将其添加到具有poco模型类的Biz项目中。我不能使用[HiddenInput(DisplayValue=false)],因为这也是web.mvc 的一方
有人能给出解决方案吗??
我认为应该创建一个自定义的Object.cshtml
编辑器模板,如中所述
http://www.headcrash.us/blog/2011/09/custom-display-and-editor-templates-with-asp-net-mvc-3-razor/
(注:我发现如何在mvc 4的web.config文件中添加程序集对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>
}