MVC3 Razor编辑器模板和其他参数

时间:2012-08-30 19:20:21

标签: asp.net-mvc-3

我是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;因为客户带来了一种新的方式来分类他的书籍,每次他改变想法时我都要重新编写所有内容......我的老人经常会这样做。 (薪水非常适合我的小经验,所以即使项目启动错误并且客户拒绝让我们从头开始重新启动,我也会尝试解决这个问题)

提前感谢任何信息,帮助等...即使它是一个有用的好演示或博客条目的链接。

1 个答案:

答案 0 :(得分:1)

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

意思是,当您将模型传递给视图时,您只拥有用户在其搜索首选项中指定的列和数据。

你可以有一个Book对象,它包含一个列列表,每个'Column'都是它自己的对象,带有Label和Value。

public BookViewModel() {     列表数据{get;组; } }

公共专栏() {     string Label {get;组; }     string Value {get;组; } }

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

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

编辑器模板用于自定义对象在html页面上的表示方式,特别是如果对象将在页面上的很多位置使用,那么您不需要重复自己。它并不是真正用于过滤数据。

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