这里提到了我的实际问题。 Hide property of model in dynamic view
为了解决这个问题,我已经覆盖了答案中提到的object.cshtml。
然而,当我这样做时,我使用UIHints呈现的下拉列表无法正常工作。 代替下拉列表,只显示False,False False(Falses的数量等于我在viewdata中的列表项数)。
我不确定这里发生了什么,有人可以告知发生了什么事吗?
在我的控制器中:
ViewData["PartyRoleTypeId"] = (IEnumerable<SelectListItem>)PartyRoleTypeRepo.All()
.ToList()
.Select(p => new SelectListItem { Value = p.PartyRoleTypeId.ToString(), Text = p.Caption, Selected = p.PartyRoleTypeId == obj.PartyRoleTypeId });
ViewData["PartyId"] = (IEnumerable<SelectListItem>)PartyRepo.All()
.ToList()
.Select(p => new SelectListItem { Value = p.PartyId.ToString(), Text = p.Organization.Caption, Selected = p.PartyId == obj.PartyId });
我在共享/ editortemplates / DropDownList.cshtml中的下拉列表编辑模板
@{
var fieldName = ViewData.ModelMetadata.PropertyName;
}
@Html.DropDownList("",(IEnumerable<SelectListItem>)ViewData[fieldName], "Choose..." , new { @class ="combo"})
object.cshtml
@functions
{
bool ShouldShow (ModelMetadata metadata)
{
return metadata.ShowForEdit
&& metadata.ModelType != typeof(System.Data.EntityState)
&& !metadata.IsComplexType
&& !ViewData.TemplateInfo.Visited(metadata);
}
}
@if (ViewData.TemplateInfo.TemplateDepth > 1)
{
if (Model == null)
{
@ViewData.ModelMetadata.NullDisplayText
}
else
{
@ViewData.ModelMetadata.SimpleDisplayText
}
}
else
{
//ViewData.Clear();
foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => ShouldShow(pm)))
{
if (prop.HideSurroundingHtml)
{
@Html.Editor(prop.PropertyName)
}
else if (prop.DisplayName == "Id")
{
<div></div>
}
else if (!string.IsNullOrEmpty(Html.Label(prop.PropertyName).ToHtmlString()))
{
<div class="editor-label">@Html.Label(prop.PropertyName)</div>
}
<div class="editor-field">@Html.Editor(prop.PropertyName) @Html.ValidationMessage(prop.PropertyName, "")</div>
}
}
答案 0 :(得分:0)
在ViewData或ViewBag中保留我的下拉列值存在一些问题。 当我使用它们时,对于prartyroletypeid,它无法识别UIHint dropdownlist.cshtml。它仍然指的是object.cshtml。 相反,我将下拉数据保存在TempData中,一切正常。
但不确定,如果我可以在这种情况下使用TempData。
任何想法???