覆盖object.cshtml MVC4时不显示下拉列表

时间:2013-07-26 06:11:24

标签: asp.net-mvc-4

这里提到了我的实际问题。 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>
}

}

1 个答案:

答案 0 :(得分:0)

在ViewData或ViewBag中保留我的下拉列值存在一些问题。 当我使用它们时,对于prartyroletypeid,它无法识别UIHint dropdownlist.cshtml。它仍然指的是object.cshtml。 相反,我将下拉数据保存在TempData中,一切正常。

但不确定,如果我可以在这种情况下使用TempData。

任何想法???