我有一个视图,我想在模型中迭代一个列表来渲染视图,当前代码就像
<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 .........
}
答案 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>