2

我有一个动态视图,这将显示已传递给它的任何模型。

@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”。而且我不能使用此处提供的答案,如何从 @Html.EditForModel() 中排除字段,但使用 Html.DisplayForModel() 显示

因为 IMetadataAware 需要 System.Web.Mvc 命名空间,我无法将其添加到具有 poco 模型类的 Biz 项目中。我也不能使用 [HiddenInput(DisplayValue = false)] 因为这也是 web.mvc 的一方

有人可以给出解决方案吗?

4

1 回答 1

2

我认为要做的是创建一个自定义Object.cshtml编辑器模板,如中所述

http://www.headcrash.us/blog/2011/09/custom-display-and-editor-templates-with-asp-net-mvc-3-razor/

(nb。我发现如何在 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>
}
于 2013-07-25T13:16:01.637 回答