0

起初 - 对不起我的英语不好。可能这是个愚蠢的问题,但是....所以,我有一个模型

public class AAAModel {
  public int I1 {get; set}
  public string S1 ...
  public Guid G1 ...
}

我有一个控制器

public ActionResult Create(AAAModel WhatToCreate){
  ...
}

而且我有一个正确的视图来输入数据......一切都很好,但现在我必须重新组织视图以创建多个表单并让用户能够动态创建新对象(模型)并将查询发送到服务器。我从服务器获得的数据来自 Ajax 查询并解析到表格网格......用户可以查看这些数据,更正它并可以将其发回。所以,我制作了几个表单,我从初始视图中复制并更改了控件的 ID 和名称最初就像

@Html.TextBoxFor(model => model.I1)
@Html.TextBoxFor(model => model.S1)
@Html.TextBoxFor(model => model.G1)

现在它变成了

<input id="I1_1" name="I1_1 ...>
<input id="S1_1" name="S1_1 ...>
<input id="G1_1" name="G1_1 ...>

在表格 1 中;

<input id="I1_2" name="I1_2 ...>
<input id="S1_2" name="S1_2 ...>
<input id="G1_2" name="G1_2 ...>

在表格 2 中,依此类推......愚蠢的问题,但我怎样才能修改控制器或我必须做些什么来获得这些值?

PS 这些表单将通过 ajax 发送......并且主机页面不会重新加载。

4

2 回答 2

0

我不知道您是否正确理解了您的问题。并且确定您是否正在这样做并且它不起作用,但为什么不只是在页面上创建多个表单。因此,当用户提交某个表单时,它只会提交该表单中的输入。

@using (Html.BeginForm("Method","Controller",FormMethod.Post,new {id="form1"}))
{
  @Html.TextBoxFor(model => model.I1)
  @Html.TextBoxFor(model => model.S1)
  @Html.TextBoxFor(model => model.G1)
  <input type="submit" name="submitButton" id=form1Submit />
}
@using (Html.BeginForm("Method","Controller",FormMethod.Post,new {id="form2"}))
{
  @Html.TextBoxFor(model => model.I1)
  @Html.TextBoxFor(model => model.S1)
  @Html.TextBoxFor(model => model.G1)
  <input type="submit" name="submitButton" id=form2Submit />
}
...

当然,您将动态创建它。如果我只是重复你的问题,我很抱歉

编辑

如果您的问题是如何确定提交了哪些数据集,我会在模型中添加一个 id 字段并为您创建的每个新表单更改它

于 2012-10-16T04:34:01.190 回答
0

看看这里: http: //blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/和这里:http://haacked.com/存档/2008/10/23/model-binding-to-a-list.aspx

更新

您始终可以使用FormCollection来获取传递的模型值。

[HttpPost]
public ActionResult MyAction(FormCollection values) 
{
   string I1_2 = values["I1_2"];    
   //do something
}

如果您需要,您可以使用动态对象指定@model dynamic,但您不需要,因为视图的默认值是从WebViewPage<dynamic>.

如果您需要传递匿名对象,也请看这里 https://stackoverflow.com/a/5670899/1241400

于 2012-10-15T20:16:21.450 回答