我正在构建一个页面,用户可以通过构建一组搜索条件来查询一组数据,类似于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代码来查看强类型视图中模型的一部分标准列表,但是我找不到添加到此列表中的整洁方法。
C#中的模型结构(大致)是这样的:
Field
:
Criterion
:
Field
Query
:
Criterion
的列表(看起来很奇怪,不说标准)QueryViewModel
:
Query
在Knockout中,我会在“添加搜索条件”按钮上添加一个点击方法,以便将新条目添加到条件列表中。我可以使用Razor功能块(@functions { ... }
)来获得类似的结果吗?我已经尝试了一些东西,但我发现viewmodel似乎不在范围内,或者没有办法更新页面以显示viewmodel的新内容(尽管我正在尝试一些涉及将新更新的视图模型传递给部分视图,这可能会以某种方式工作)。可以这样做,还是我需要深呼吸并回到Javascript?
答案 0 :(得分:1)
您可以使用标准MVC控制器和JSONResult或使用MVC 4中的Web API将C#对象序列化/反序列化为JSON。这意味着您无需在javascript中显式重新定义c#对象。
在浏览器中,您可以使用knockout映射插件在需要时将json属性设置为knockout observable。
这通常比从服务器动态加载和呈现html更简洁,更健壮(如果那是你的建议 - 从你的帖子中没有100%清除)。