C# 从强类型razor视图收集数据

C# 从强类型razor视图收集数据,c#,asp.net-mvc-3,razor,C#,Asp.net Mvc 3,Razor,这是我的第一个asp.NETMVC应用程序。我正在使用MVC3和razor来获取我的视图。我遇到问题的特定视图是强类型视图(至少我认为是),但它接受这种类型: @model List<List<DataAccess.MCS_DocumentFields>[]> 我正在寻找获取数据的最佳方法,并在数据库中更新更改的内容。在我的控制器中,我有以下方法: [HttpPost] public ActionResult ActionMethodName(FormC

这是我的第一个asp.NETMVC应用程序。我正在使用MVC3和razor来获取我的视图。我遇到问题的特定视图是强类型视图(至少我认为是),但它接受这种类型:

@model List<List<DataAccess.MCS_DocumentFields>[]>
我正在寻找获取数据的最佳方法,并在数据库中更新更改的内容。在我的控制器中,我有以下方法:

[HttpPost]
        public ActionResult ActionMethodName(FormCollection collection)
        {
            var test = collection;
            List<MCS_Documents> model = DocumentsService.All().ToList();
            return View("Index", model);
        }
[HttpPost]
公共ActionResult ActionMethodName(FormCollection集合)
{
var测试=收集;
列表模型=DocumentsService.All().ToList();
返回视图(“索引”,模型);
}
这样我可以找到我的数据,但它太复杂了,我甚至不知道如何找到它。我尝试了其他方法,使用相同的方法,但接受视图接受的类型作为参数:

[HttpPost]
            public ActionResult ActionMethodName(List<List<DataAccess.MCS_DocumentFields>[]> collection)
            {
[HttpPost]
公共ActionResult ActionMethodName(列表集合)
{
但是当我这样做的时候,集合有空值。从我所知的一点来看,当我使用强类型视图时,我可以获得一些额外的优势,比如form.validation和数据绑定准备更新等等

那么,在我的特定场景中,处理表单提交的数据的最佳方式是什么

附言

以下是我呈现主视图的方式:

<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>

@对于(int i=0;i
这是我的一部分,只是为了展示我如何使用它们:

@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>
@model List[]
@如果(!string.IsNullOrEmpty(模型[0][0].FieldValue))
{ 
@DisplayFor(x=>x[0][0].FieldValue)
}
其他的
{ 
在这里登录
}         
@如果(!string.IsNullOrEmpty(模型[1][0].FieldValue))
{ 
@DisplayFor(x=>x[1][0].FieldValue)
}
其他的
{ 
在这里登录
}        

最后一个操作方法是正确的(它采用您的强类型),但是您的视图需要采用不同的结构。您需要确保每个集合(甚至子集合)都正确索引,否则模型绑定将失败

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

主要观点:

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

@for (int i = 0; i < Model.Count; i++)
{
    @Html.RenderPartial("PartialName", Model[i])
}
@型号列表
@for(int i=0;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
      }
  }
@model List[]
@for(int i=0;i
请展示如何从模型中渲染数据(一定有某种循环)@Jan请查看编辑过的原始帖子。哇,你甚至还没有看到我的更新。你可以看到我在原始帖子中添加的代码。我使用模型的方式你说得对,但你可以看到我已经通过了
模型[I]
在@Html.Partial中,我的控制器中仍然为空。你认为为什么会发生这种情况?@Leron你实际上没有任何字段保存任何要发送回服务器的数据?你只有
DisplayFor
,没有发布。试着添加
HiddenFor
,看看是否有任何区别。事实上,我有3个字段:)但我现在必须离开。我会接受你的答案,明天再看一遍,并添加一些
隐藏内容,以便获得更多信息。谢谢。
@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>
@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
      }
  }