【问题标题】:Knockout-style dynamic page with Razor viewmodels and @functions?带有 Razor 视图模型和@functions 的淘汰赛风格的动态页面?
【发布时间】:2013-01-29 06:39:40
【问题描述】:

我正在构建一个页面,用户可以在其中通过构建一组搜索条件来查询一组数据,类似于 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:
    • Criterions 列表(不说标准看起来很奇怪)
    • 开始和结束日期
    • 用户的访问级别
    • 查看字段和排序选项
  • QueryViewModel:
    • Query
    • 用于填充视图选项选择区域的分类列表
    • 页面上其他(不相关)显示的一些元数据

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

【问题讨论】:

    标签: c# web-applications asp.net-mvc-4 razor-2


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-12-21
      • 2013-02-18
      • 2015-11-12
      • 2012-07-16
      • 1970-01-01
      • 2013-02-19
      • 2014-05-07
      • 2014-01-30
      • 2013-01-01
      相关资源
      最近更新 更多