1

我是 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 => model.Books) 的概念,它会循环抛出我的书单,但我怎样才能确保它只显示用户想要的东西?,比如可以我将某种参数传递给模板并使用传递的列表来验证每一列?

有没有更简单的方法来写下我的模板..有点像“在我的书模型中获取每个属性并创建一行,如果用户选择了它”,因为客户提供了一种对他的书进行分类的新方法,我每次他改变想法时,我都必须重新编码所有内容……我的前辈经常发生这种情况。(对于我的一点经验来说,报酬非常好,所以即使项目开始错误并且客户拒绝让我们从头开始,我也会尝试解决这个问题)

提前非常感谢您提供的任何信息、帮助等……即使它是指向一个很好的演示或博客条目的链接,这将有所帮助。

4

1 回答 1

1

我不是 100% 确定您要做什么,但如果我理解正确,您有一个用户偏好列表,可以在表格中显示什么。我对您的建议是构建一个已经按照您希望的方式格式化数据的视图模型。

这意味着,当您将模型传递给视图时,您只有用户在他/她的搜索首选项中指定的列和数据。

你可以有一个 Book 对象,它包含一个列列表,每个“列”都是它自己的对象,带有一个标签和一个值。

公共 BookViewModel() { 列表数据 { 获取;放; } }

公共列(){字符串标签{获取;放; } 字符串值 { 获取;放; } }

加载模型时,您只会为用户想要的数据创建列。

可能有更好的方法来格式化它,我只是想到了这一点。但我认为你应该着眼于处理数据服务器端的过滤和格式化,而不是在页面上的 Razor 中。

编辑器模板用于自定义对象在 html 页面上的表示方式,特别是如果该对象将在页面上的很多地方使用,因此您无需重复自己。它并不是真正为过滤数据而设计的。

如果这没有意义或者我误解了你,请告诉我。

于 2012-08-30T19:49:36.047 回答