如何在使用超级简单视图引擎时设置列表索引

时间:2013-09-11 12:50:59

标签: nancy

我有一个视图,我想在模型中迭代一个列表来渲染视图,当前代码就像

<form method="Post">
  <table class="table">
   @Each
     <tr>
      <td>
        <input type="hidden" name="Id[]" value="@Current.Id" />@Current.Id
      </td>
      <td>
        <input type="text" name="Name[]" value="@Current.Name"/>
      </td>
      <td>
        <input type="text" name="Code[]" value="@Current.Code"/>
      </td>
      <td>
        <button type="submit">Submit</button>
      </td>
    </tr>
   @EndEach
  </table>
</form>

我真正希望做的是

<form method="Post">
  <table class="table">
   @Each
     <tr>
      <td>
        <input type="hidden" name="Id[@CurrentIndex]" value="@Current.Id" />@Current.Id
      </td>
      <td>
        <input type="text" name="Name[@CurrentIndex]" value="@Current.Name"/>
      </td>
      <td>
        <input type="text" name="Code[@CurrentIndex]" value="@Current.Code"/>
      </td>
      <td>
        <button type="submit">Submit</button>
      </td>
    </tr>
   @EndEach
  </table>
</form>

其中@CurrentIndex将插入列表索引。

然后可以使用列表索引在POST期间将属性绑定到列表,如

 Post["/"] = _ => {
    var list = this.Bind<List<Model>>();
    ...... do something with list .........

  }

1 个答案:

答案 0 :(得分:5)

SSVE是“愚蠢的”,无法执行任何任意代码。执行此操作的唯一方法是将索引放入模型中,您可以使用LINQ执行此类操作(未编译,只需从内存中键入):

var indexedModel = model.Select((m,i) => new { Index = i, Model = m });

然后在您的视图中执行以下操作:

<form method="Post">
  <table class="table">
   @Each
     <tr>
      <td>
        <input type="hidden" name="Id[@Current.Index]" value="@Current.Model.Id" />@Current.Id
      </td>
      <td>
        <input type="text" name="Name[@Current.Index]" value="@Current.Model.Name"/>
      </td>
      <td>
        <input type="text" name="Code[@Current.Index]" value="@Current.Model.Code"/>
      </td>
      <td>
        <button type="submit">Submit</button>
      </td>
    </tr>
   @EndEach
  </table>
</form>