2

我有一个视图,我想在模型中迭代一个列表以呈现视图,当前代码类似于

<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 .........

  }
4

1 回答 1

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>
于 2013-09-11T13:48:06.250 回答