|
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(不能改),获取这一堆数据。