传递不同的类型来查看

时间:2013-11-20 12:51:52

标签: c# asp.net asp.net-mvc-4

我在控制器中有一个方法,我在其中传递查看具有不同类型的对象,如:

case ItemType.Magnets:  
{
   return View(dbHelper.Magnets.Details(id));
}
case ItemType.Maps:
{
   return View(dbHelper.Maps.Details(id));
}

我如何为此写一个视图?

2 个答案:

答案 0 :(得分:1)

您可能想要创建两个不同的视图,每个视图都称为唯一视图,每个视图都接受自己的视图模型。

您还需要在控制器类中指定视图名称:

return View("ViewName_1", dbHelper.Maps.Details(id));

return View("ViewName_2", dbHelper.Magnets.Details(id));

@AlexDefine,除非您想为内部所有类型的属性创建通用视图,这并不容易。

我在这里有一部分:

@model object

<table>
    @{
        var properties = from prop in ViewData.ModelMetadata.Properties
                         let propInfo = prop.ContainerType.GetProperty(prop.PropertyName)
                         where !ViewData.TemplateInfo.Visited(prop)
                         select prop;
    }

    @foreach (var prop in properties)
    {
        <tr>
            <td>
                <div style="float: right;">
                    @prop.GetDisplayName()
                </div>
            </td>
            <td>
                <div class="editor-field">
                    @Html.Editor(prop.PropertyName, new { ContainerModel = Model })
                </div>
            </td>
        </tr>
    }
</table>

或多或少,它制作了任何一种模型的表格。但你应该自己升级它以满足你的需求。

答案 1 :(得分:1)

您需要为不同的项目创建不同的视图。这是解决方案

case ItemType.Magnets:  
{
  return View("MagnetsView",dbHelper.Magnets.Details(id));
}
case ItemType.Maps:
{
  return View("Maps",dbHelper.Maps.Details(id));
}

如果要显示磁铁项目,您需要创建磁铁视图。地图相同。