2013-07-25 2 views
2

У меня есть динамический вид, на нем будет отображена любая модель, которая была передана ему.Скрыть свойство модели в динамическом режиме

@model dynamic 

@using (Html.BeginForm("Edit", null, FormMethod.Post, new { id="FrmIndex" })) 
{ 
@Html.ValidationSummary(true); 
@Html.EditorForModel() 

<input type="submit" value="Edit" /> 
} 

Say один из моей модели 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 имен, которые я не могу добавить в мой Biz проектов, имеющих РоКо классы модели. Я не могу использовать [HiddenInput (DisplayValue = false)] также потому, что это также участник web.mvc

может кто-нибудь дать решение?

+0

@DylanSlabbinck, боюсь, я не получил вас. Это в значительной степени мои взгляды. Я нигде не использовал Label. вы можете разработать? – mmssaann

+0

Можете ли вы использовать [ScaffoldColumn (false)]? Это вытолкнет свойство из EditForModel(), но также вытолкнет его из DisplayForModel(). – Yellowfog

+0

nope, scoffold не отображает столбец вообще. Нам нужен идентификатор, когда мы отправляем данные обратно контроллеру. Так что это должно быть скрытое поле в представлении. – mmssaann

ответ

2

Я думаю, что вещь, чтобы сделать, это создать шаблон редактора пользовательских Object.cshtml, как описано в

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

(пь. Я нашел 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> 
} 
+0

@ Yellowfor, спасибо за ответ. Я пробовал путь. Но с этим повлияла какая-то существующая функциональность. У меня есть IEnumerable в ViewData, который я показываю в виде раскрывающегося списка в представлении, используя: Html.DropDownList ("", (IEnumerable ) ViewData [fieldName], "Choose ...", new {class = "комбо"}). Теперь при добавлении объекта object.cshtml это выпадающее меню не отображается, оно отображает все данные как простой текст False False ... как на моем экране. Есть идеи?? – mmssaann

+0

Хотя у меня есть некоторые другие проблемы, этот подход работает нормально, поэтому я проголосую за него. – mmssaann

+0

Спасибо - я постараюсь выяснить ответ на ваш другой вопрос, когда у меня будет время. – Yellowfog

Смежные вопросы