我知道这是非常标准的过程,但是由于对表创建方式的一些自定义要求,我很难找到从表中读取数据并将其传递回 Controller 的方法。
我使用数据库中的记录构建表,每个记录保存 rowNo 和 columnNo,问题是每个原始数据可能有不同数量的列。我找不到可以构建这个的合适插件,所以我做了一个简单的方法来创建一个传递给 View 的字符串。
为了了解我在这里所说的内容,请参阅代码片段,您可以在其中看到我如何创建 <td>..</td>
:
sb.Append("<td>" + innerArray[a][0].QuestionText +
"<input type='textbox' value=" +
innerArray[a][0].FieldValue + "></td>");
我知道使用 StringBuilder 和 +
不是很聪明但目前它有效。然而,在构建我的字符串并将其传递给 View 之后,我得到了这个:
这是来自 View page source
的来源:
<tr>
<td>alabala<input type='textbox' value=></td>
<td colspan=2><input type='textbox' value=yes></td>
</tr>
<tr>
<td colspan=3>alabala<input type='textbox' value=yes></td>
</tr>
<tr>
<td colspan=3>alabala<input type='textbox' value=yes></td>
</tr>
<tr>
<td>alabala<input type='textbox' value=no></td>
<td>alabala<input type='textbox' value=no></td>
<td>alabala<input type='textbox' value=no></td>
</tr>
<tr>
<td>alabala<input type='textbox' value=no></td>
<td colspan=2><input type='textbox' value=no></td>
</tr>
<tr>
<td colspan=3>alabala<input type='textbox' value=></td>
</tr>
<tr>
<td colspan=3>alabala<input type='textbox' value=no></td>
</tr>
这就是您所看到的 - 一个包含整个 HTML 代码的长字符串。
所有文本框都是可编辑的,因此我需要一种读取每个文本框数据并将其与 RowNo 和 ColumnNo 一起保存/传递的方法,以便我可以将其保存回数据库中。
最佳答案
为什么不使用 View 模型?您在 Controller 操作中使用此字符串生成器所做的事情绝对违背了您在 MVC 设计模式中可能拥有的所有良好实践。
因此,与往常一样,您可以从定义满足 View 要求的 View 模型开始:
public class ColViewModel
{
public string RowNumber { get; set; }
public string ColumnNumber { get; set; }
public string QuestionText { get; set; }
public string FieldValue { get; set; }
}
public class RowViewModel
{
public List<ColViewModel> Columns { get; set; }
}
好吧,现在让我们继续填充此 View 模型并将其传递给 View :
public ActionResult Index()
{
// in your question you have shown something called innerArray, so I assume you
// already retrieved this from your database or something:
SomeDomainModel[,] innerArray = ...
var model = new List<RowViewModel>();
for (var row = 0; row < innerArray.GetUpperBound(0); row++)
{
var rowModel = new RowViewModel
{
Columns = new List<ColViewModel>()
};
for (var col = 0; col < innerArray.GetUpperBound(1); col++)
{
rowModel.Columns.Add(new ColViewModel
{
RowNumber = innerArray[row, col].RowNo,
ColumnNumber = innerArray[row, col].ColumnNo,
QuestionText = innerArray[row, col].Question,
FieldValue = innerArray[row, col].FieldValue,
});
}
model.Add(rowModel);
}
return View(model);
}
[HttpPost]
public ActionResult Index(List<RowViewModel> model)
{
...
}
最后在相应的强类型 View 中:
@model List<RowViewModel>
@using (Html.BeginForm())
{
<table>
@for (var i = 0; i < Model.Count; i++)
{
<tr>
@for (var j = 0; j < Model[i].Columns.Count; j++)
{
<td>
@Html.HiddenFor(x => x[i].Columns[j].RowNumber)
@Html.HiddenFor(x => x[i].Columns[j].ColumnNumber)
@Html.DisplayFor(x => x[i].Columns[j].QuestionText)
@Html.EditorFor(x => x[i].Columns[j].FieldValue)
</td>
}
</tr>
}
</table>
<button type="submit">Save</button>
}
关于c# - 从表中读取数据并将其传递给asp.net mvc3中的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16207988/