0

我正在构建一个页面,用户可以在其中通过构建一组搜索条件来查询一组数据,类似于 Visual Studio TFS 插件让您搜索工作项的方式:一个条件表,您可以在其中继续添加行。您为连接条件选择“和”或“或”,然后选择一个字段,输入一个值,然后选择是否需要匹配或不匹配的内容:

1. show items where [Field] [is|is not] [value]
2.         [and|or] [Field] [is|is not] [value]
3.         [and|or] [Field] [is|is not] [value]
etc...

现在,我正在寻找构建它的方法,我有一个想法。过去,我使用过 Knockout,但这需要我在 Javascript 中使用模型来将数据映射到,当我已经在服务器端代码中使用 C# 中的这些模型时,这似乎是多余的。当然,我可以使用 Razor 代码在强类型视图中通过作为模型一部分的标准列表进行 foreach,但我找不到添加到此列表的整洁方法。

C# 中的模型结构(大致)是这样的:

  • Field
    • 字段名称
    • 值的选项列表
    • is/is not 选项的布尔值。
  • Criterion
    • Field
    • 选定值
    • 组合类型(和/或)
  • Query
    • s列表Criterion(不说标准看起来很奇怪)
    • 开始和结束日期
    • 用户的访问级别
    • 查看字段和排序选项
  • QueryViewModel
    • Query
    • 用于填充视图选项选择区域的分类列表
    • 页面上其他(不相关)显示的一些元数据

在 Knockout 中,我会在“添加搜索条件”按钮中添加一个单击方法,以将新条目添加到条件列表中。我可以使用 Razor 功能块 ( @functions { ... }) 来实现类似的结果吗?我已经尝试了一些东西,但是我发现视图模型似乎不在范围内,或者无法更新页面以显示视图模型的新内容(尽管我正在尝试一些涉及将新更新的视图模型传递给局部视图,这可能会以某种方式工作)。这可以做到吗,还是我需要深呼吸并回到 Javascript?

4

1 回答 1

1

您可以使用标准 MVC 控制器和 JSONResult 或使用 MVC 4 中的 Web API 将 C# 对象序列化/反序列化为 JSON。这意味着您不必在 javascript 中显式地重新定义您的 c# 对象。

在浏览器中,如果需要,您可以使用敲除映射插件将您的 json 属性变成敲除 observables。

这通常是一种比从服务器动态加载和呈现 html 更清洁、更强大的方法(如果这就是您的建议 - 从您的帖子中没有 100% 清楚)。

于 2013-02-13T17:00:11.987 回答