1
2
3
4
5
6
7
8
9
10
11
|
public class TableEntity { public string TableName { get ; set ; } public string TableType { get ; set ; } public List<Colmun> Cols { get ; set ; } } public class Colmun { public string ColumnName { get ; set ; } public string ColumnValue { get ; set ; } } |
view 中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
@using (Html.BeginForm()) { @Html.ValidationSummary(true) < fieldset > < legend >TableEntity</ legend > < div class = "editor-label" > @Html.LabelFor(model => model.TableName) </ div > < div class = "editor-field" > //这是TableName 的输入框 @Html.EditorFor(model => model.TableName) @Html.ValidationMessageFor(model => model.TableName) </ div > < div class = "editor-label" > @Html.LabelFor(model => model.TableType) </ div > < div class = "editor-field" > @Html.EditorFor(model => model.TableType)//这是TableType 类型的输入框 @Html.ValidationMessageFor(model => model.TableType) </ div > < div > 1.这里是 Cols 的输入框,要显示为“ 列名输入textbox, 列的值输入textbox” 列名和列值为1对1 请问这里应该怎么写? 2.如果这里 Cols 的列为动态添加的,用户点一下添加一列,这一列 能映射到model 中,这样提交后就可以直接在后台取到了。 </ div > < p > < input type = "submit" value = "Create" /> //这里点击后 执行controller下的程序 </ p > </ fieldset > } |
controller:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[HttpPost] public ActionResult Create(TableEntity table) { try { // TODO: Add insert logic here //这里可以接收到 view 中 动态生成列的集合 table.Cols return RedirectToAction( "Index" ); } catch { return View(); } } |
如果数量是确定的话,可以如下:
@for(int i = 0; i < Model.Cols.Count;i++) { @Html.EditorFor(m => m.Cols[i].TableType) }
数量不确定,根据用户的动态添加来确定数量
@气质优雅的猪: 那样的话,需要通过js来完成。
@sinhbv:
@气质优雅的猪:
<input name="table.Cols[0].Name" type="text" />
<input name="table.Cols[0].Value" type="text" />
类似上面这样,要从0开始,连续向下,中间不能中断,在添加行时,name必须以之一致。
或者采用别一种方法,自定义一个ModelBuilder,在构建Model时,实现自定义
<input name="模型中的属性,TableEntity "> 提交你可以使用from ,也可以使用ajaxFrom。提交到”控制器/方法“。
谢谢 您的回答。
首先只有强类型实体,才能再后台首先自动属性赋值;
@foreach(var m in Model.Cols) { <textarea name='cols'>@m.Value</textarea> }
后台可以用List<string> cols(不能改),获取这一堆数据。