我是mvc3和razor的新手,也是C#的新手,而一家小公司刚刚给我一份合同,以一个失败的方式完成这个巨大的项目...现在我需要创建一个表基于用户保存的选择的书籍......书籍目前在模型中有大约40种不同的信息,我想知道如何在模板编辑器中以任何其他方式正确设置...
现在它在视图中看起来像那样:
<table>
<tr class="header">
@if (!((List<string>)Session["searchPreferences"]).Contains("Authors"))
{
<td>Author</td>
}
@if (!((List<string>)Session["searchPreferences"]).Contains("bookName"))
{
<td>bookName</td>
}
@if (!((List<string>)Session["searchPreferences"]).Contains("editorName"))
{
<td>editorName</td>
}
</tr>
@foreach (BookModel book in Model.bookList)
{
<tr class="element">
@if (!((List<string>)Session["searchPreferences"]).Contains("Author"))
{
<td>@book.Author</td>
}
@if (!((List<string>)Session["searchPreferences"]).Contains("editorName"))
{
<td>@book.editorName</td>
}
</tr>
+ 1 <tr> </tr> ... for each 40 attributes in books
</table>
如何制作编辑器模板并包含搜索首选项(存储在会话中或LogUser模型中...
其他问题:
我已经掌握了使用@ Html.EditorFor(model =&gt; model.Books)的概念,并且它循环扔了我的书籍清单,但我怎样才能确定它?只显示用户想要的内容?我可以将某种参数传递给模板并使用传递的列表来验证每个列吗?
并且有一种更简单的方式来记下我的模板..有点像&#34;在我的书模型中获取每个属性并创建一行,如果用户选择了它&#34;因为客户带来了一种新的方式来分类他的书籍,每次他改变想法时我都要重新编写所有内容......我的老人经常会这样做。 (薪水非常适合我的小经验,所以即使项目启动错误并且客户拒绝让我们从头开始重新启动,我也会尝试解决这个问题)
提前感谢任何信息,帮助等...即使它是一个有用的好演示或博客条目的链接。
答案 0 :(得分:1)
我不是100%确定你要做什么,但是如果我理解你正确的话,你会有一个用户首选项列表,显示在表格中。我的建议是构建一个已经按照您希望的方式格式化数据的视图模型。
意思是,当您将模型传递给视图时,您只拥有用户在其搜索首选项中指定的列和数据。
你可以有一个Book对象,它包含一个列列表,每个'Column'都是它自己的对象,带有Label和Value。
public BookViewModel() { 列表数据{get;组; } }
公共专栏() { string Label {get;组; } string Value {get;组; } }
加载模型时,您只需为用户想要的数据创建列。
您可能有更好的方式来格式化它,我只是想到这一点。但我认为您应该考虑处理数据服务器端的过滤和格式化,而不是在页面上的Razor中。
编辑器模板用于自定义对象在html页面上的表示方式,特别是如果对象将在页面上的很多位置使用,那么您不需要重复自己。它并不是真正用于过滤数据。
如果这没有意义,或者我误解了你,请告诉我。