【问题标题】:MVC Editor Template accessing common data for multiple recordsMVC 编辑器模板访问多条记录的公共数据
【发布时间】:2012-10-12 17:10:31
【问题描述】:

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

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。

【问题讨论】:

    标签: c# asp.net-mvc-3 mvc-editor-templates


    【解决方案1】:

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

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

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

    【讨论】:

    • 我很害怕,感谢您的意见。 (我将编辑器放在列表中的原因是因为这是让模型绑定在列表中正常工作的唯一方法)
    • 在使用列表时,我更幸运地使用自定义助手来告诉活页夹要做什么,尤其是在使用部分视图时。这里有一个 MVC 2 示例,很容易转换为 Razor:blog.stevensanderson.com/2010/01/28/…
    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多