2011-03-24 39 views
1

我是弗朗西斯,我是新手。关于View和Controller之间发布的数据,ASP.NET MVC3有问题。我的目标是使用表单来编辑我的数据库中的特定记录,然后将其发送回控制器,控制器负责检查记录的字段并将它们提交到数据库中。 通过使用ViewModel将数据从Controller传递到View,因此DefaultDataBinding不适用于这种情况。我尝试了很多方法,我监控了与Fiddler的沟通,但我无法解决我的问题。 Phil Haack描述的方法不起作用,FormCollection也不起作用。通行证嵌套列表来控制使用的ViewModels

这里有代码:

的ViewModels:我把它传递给视图中创建一个表。只需显示名称和项目名称(表格列标题)列表。我想返回Id,Month(它们作为参数正确传递并表示表格行标题),最重要的是Items和它们的Id的ActualValue(我的数据库中有一个关联表,其中Id,Itemid和Month分别为键)

public class EditViewModel 
{ 
    [ScaffoldColumn(false)] 
    public int Id { get; set; } 

    [ScaffoldColumn(false)] 
    public int Month { get; set; } 

    public string Name { get; set; } 

    public List<ItemViewModel> ItemList { get; set; } 
} 

public class ItemViewModel 
{ 
    [ScaffoldColumn(false)] 
    public int ItemId { get; set; } 

    public string ItemName { get; set; } 

    public float ActualValue { get; set; } 
} 

查看:视图强类型为ViewModels.EditViewModel并通过提交按钮发送字段。我必须使用的foreach循环生成的表,因为我不知道有多少项目有提前

控制器:控制器有更新来自与特定标识和月视图通过每个KPI。

  [HttpPost] 
    public ActionResult EditMonth(int Id, int Month, //FormCollection kpiValues) 

我希望我很清楚,我期待着有一些帮助。非常感谢!

+0

请告诉我你的问题? – Landern 2011-03-24 15:42:32

+0

对不起,摩西,我是新来的,我必须改进我发布问题的方式。我的问题是“如何将具有未知数量的元素的嵌套列表(在另一个列表中)从强类型View传递给Controller?” – CiccioMiami 2011-03-25 08:04:23

回答

1

这里有一个猜测:你的控制器方法(EditMonth)正在寻找一个名为Id和月两个参数。默认情况下,这些是绑定器在请求中查找的名称,当用户单击提交按钮时,该名称将被发送回服务器。

不过,我怀疑所呈现的页面上的属性被命名为类似EditViewModel_Id和EditViewModel_Month。所以活页夹将无法匹配它们。

您可以覆盖粘合剂的默认操作。但我认为,一个更简单的方法是重新定义EditMonth方法,以便它预计的EditViewModel对象:

[HttpPost] 
public ActionResult EditMonth(EditViewModel model) 
{... 

名称应该再搭配起来(你要检查ModelState.IsValid,当然要确保该联编程序没有遇到设置EditViewModel对象的问题)。

BTW,这东西我发现有用的是看在浏览器中呈现的页面的源代码。然后,您可以看到活页夹将查找的确切名称匹配(它们是HTML元素中的name = ...属性)。

+0

亲爱的马克,谢谢你的回复。参数Id和月份可以通过[HttpPost] EditMonth操作方法正确查看。那些根本没有被action方法看到的是List ItemList。我还尝试创建一个与EditViewModel相同的后置模型,除了Name属性(我只需要它在View中显示名称)。我想这个活页夹的问题是当它必须在视图模型中填充一个neste列表时... – CiccioMiami 2011-03-27 15:59:23

+0

请问您可以发布您的视图代码。 – JayneT 2011-04-01 14:30:18