Html Helper在mvc3 razor视图中创建可重用的函数?

时间:2012-05-22 21:32:53

标签: asp.net asp.net-mvc-3 razor lambda

我有以下代码块,在剃刀视图中复制和粘贴大约5次。它基本上只使用不同的数据显示同一模型的表格。

如何将其重新编写为html帮助器或lambda func,以便我可以将其重用于传递给视图的n个不同模型?

  // Example for Model.A and Model.B 

  var cCols = new[] { "val1", "val2"};

    // Display the data for A
   <div class="group-property">
    <div class="group-label">Title A</div>        
        <table class="collection-table">
        <thead>
        <tr class="collection-head">@foreach (var col in cCols) {<th scope="col">@col</th>}</tr>
         </thead>
         <tbody>
            @foreach (var item in Model.A)
            {
                <td>@item.val1</td>
                <td>@item.val2</td>
            }
         </tbody>
         </table>
    </div>

   // Display the data for B
   <div class="group-property">
    <div class="group-label">Title B</div>        
        <table class="collection-table">
        <thead>
        <tr class="collection-head">@foreach (var col in cCols) {<th scope="col">@col</th>}</tr>
         </thead>
         <tbody>
            @foreach (var item in Model.B)
            {
                <td>@item.val1</td>
                <td>@item.val2</td>
            }
         </tbody>
         </table>
    </div>

2 个答案:

答案 0 :(得分:2)

我不知道我是否正确,但为什么不使用@ Html.Partial?

Andrei Neagu

答案 1 :(得分:1)

我不确定你尝试了什么,但为了使它成为一个辅助功能,你只需要取出不同的部分并使它们成为函数的参数:

@helper MyHelperFunction(string title, IEnumerable<ItemClass> items)
{
var cCols = new[] { "val1", "val2"};

<div class="group-property">
<div class="group-label">@title</div>        
    <table class="collection-table">
    <thead>
    <tr class="collection-head">@foreach (var col in cCols) {<th scope="col">@col</th>}</tr>
     </thead>
     <tbody>
        @foreach (var item in items)
        {
            <td>@item.val1</td>
            <td>@item.val2</td>
        }
     </tbody>
     </table>
</div>
}

@MyHelperFunction("Title A", Model.A)
@MyHelperFunction("Title B", Model.B)