0

我想在我的对象的表中列出可编辑的行

class Widget
{
    string shape;
    string color;
}

颜色将来自下拉列表,所以我有一个这样的视图模型

class WidgetListViewModel
{
    List<Widget> widgets;
    SelectList colorsSelectList;
}

我有一个用于 Widget 的 EditorTemplate (WidgetEditorTemplate)。

以下是在视图中调用模板的方式:

for(int i=0; i< in WidgetListViewModel.widgets.Count; i++)
{
    EditorFor(WidgetListViewModel.widgets[i], "WidgetEditorTemplate");
}

我的问题是,在 WidgetEditorTemplate 中,如何访问颜色选择列表?

我知道我可以将 colorsSelectList 添加到 Widget 模型(或新的视图模型),但是我必须为每个小部件记录加载 colorsSelectList。

4

1 回答 1

1

首先,你不应该使用 for 循环。如果您在列表上使用 EditorFor,它应该自动为列表中的每个项目调用 Widget 编辑器。

除此之外,我知道这不是您想听到的,但我认为您的选择是将所选颜色添加到 Widget 视图模型。视图模型的想法是它应该包含渲染视图所需的所有数据。在这种情况下,您需要颜色信息来渲染视图,所以它应该放在视图模型中。

另一种选择是将 Widget 内容放在部分视图中,而不是编辑器模板中。首次加载页面时,使用服务器端 RenderPartial 将其包含在内。当颜色改变时,您可以执行 ajax 回调以使用新颜色重新渲染部分。这条路线给你一个可能太慢的回调,但它让你只需将所选颜色作为参数传递,而不必将其存储在任一模型上。

于 2012-10-12T17:16:23.863 回答