gpt4 book ai didi

c# - 从强类型 Razor View 收集数据

转载 作者:行者123 更新时间:2023-11-30 17:05:27 25 4
gpt4 key购买 nike

这是我的第一个 asp.net mvc 应用程序。我正在使用 mvc 3 和 razor 来表达我的观点。我有问题的特定 View 是强类型 View (至少我认为是)但它接受这种类型:

@model List<List<DataAccess.MCS_DocumentFields>[]>

我做了几个局部 View ,因为主视图是非常定制的,我需要为数据的不同部分提供很多不同的逻辑。我的部分观点也是强类型的(我再次认为这是正确的说法)类型:

@model List<DataAccess.MCS_DocumentFields>[]

构建 View 所需的一切都在:

@using (Html.BeginForm("ActionMethodName", "Forms", FormMethod.Post))
{
<div id="drawForm">
<table border="1">

Hhtml.BeginForm 中,我使用来自 Controller 的所有数据构建表。现在提交:

<button type="submit">Submit</button>

我正在寻找获取数据并在数据库中更新更改内容的最佳方式。在我的 Controller 中我有这个方法:

[HttpPost]
public ActionResult ActionMethodName(FormCollection collection)
{
var test = collection;
List<MCS_Documents> model = DocumentsService.All().ToList();
return View("Index", model);
}

这样我可以找到我的数据,但它太复杂了,我什至不确定如何找到它。我尝试了其他方法,使用相同的方法但接受 View 接受的类型作为参数:

[HttpPost]
public ActionResult ActionMethodName(List<List<DataAccess.MCS_DocumentFields>[]> collection)
{

但是当我这样做时,集合具有空值。据我所知,当我使用强类型 View 时,我可以获得一些额外的优势,例如 form.validation 和准备更新的数据绑定(bind)等等......

那么,在我的特定情况下,处理从表单提交的数据的最佳方式是什么?

附言

这是我渲染主视图的方式:

<table border="1">
<colgroup>
<col span="1" style="width: 10%;" />
<col span="1" style="width: 40%;" />
<col span="1" style="width: 25%;" />
<col span="1" style="width: 25%;" />
</colgroup>
<tbody>
@for (int i = 0; i < Model.Count(); i++)
{
if (Model[i][0][0].ContentTypeId == 1)
{
@Html.Partial("_PartialHeader", Model[i])
}
else if (Model[i][0][0].ContentTypeId == 2)
{
@Html.Partial("_PartialDrawing", Model[i])
}
else if (Model[i][0][0].ContentTypeId == 3)
{
@Html.Partial("_PartialBody", Model[i])
}
else if (Model[i][0][0].ContentTypeId == 4)
{
@Html.Partial("_PartialFooter", Model[i])
}
}
</tbody>
</table>
<button type="submit">Save</button>

这是我的部分作品之一,只是为了展示我如何使用它们:

@model List<DataAccess.MCS_DocumentFields>[] 
<tr>
@if (!string.IsNullOrEmpty(Model[0][0].FieldValue))
{
<td colspan="2">
@Html.DisplayFor(x => x[0][0].FieldValue)
</td>
}
else
{
<td colspan="2">
Sign in here
</td>
}

@if (!string.IsNullOrEmpty(Model[1][0].FieldValue))
{
<td colspan="2">
@Html.DisplayFor(x => x[1][0].FieldValue)
</td>
}
else
{
<td colspan="2">
Sign in here
</td>
}

</tr>

最佳答案

最后一个 action 方法是正确的(它采用你的强类型),但你的 View 需要以不同的方式构建。您需要确保每个集合(甚至是子集合)都被正确索引,否则模型绑定(bind)将失败

您的 View 应该类似于以下内容(注意 for 循环的使用):

主视图:

@model List<List<DataAccess.MCS_DocumentFields>[]>

@for (int i = 0; i < Model.Count; i++)
{
@Html.RenderPartial("PartialName", Model[i])
}

然后在你的部分:

  @model List<DataAccess.MCS_DocumentFields>[]

@for (int i = 0; i < Model.Count; i++)
{
//Not sure if you need anything at this level
for (int j = 0; j < Model[i].Count(); j++)
{
//Add your EditorFor's, HiddenFor's etc for the child type
}
}

关于c# - 从强类型 Razor View 收集数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com