使用ASP.NET MVC 4将表单提交的其他参数传递给控制器

时间:2013-11-05 11:35:50

标签: asp.net forms asp.net-mvc-4

我有一个编辑视图,允许我的用户更新有关车辆的技术信息。执行编辑时,我想将客户编号和车辆编号传递给控制器​​,以便我可以对客户和车辆进行审计日志记录,以记录更改。

我的控制器中有这个代码:

GET:

public ActionResult Edit(int id, int? AuditLogID, int? ErrorLogID, int CustomerNo, int VehicleNo)

POST:

public ActionResult Edit(int id, VehicleAssetTechnicalInformation technicalInformation, int CustomerNo, int VehicleNo)

应该要求CustomerNo和VehicleNo - 如果没有这些细节,更新不应该继续,因为必须审核所有内容。

在我的Edit.cshtml视图中,我有这个:

@using (Html.BeginForm("Edit", 
    "VehicleAssetTechnicalInformation", 
    FormMethod.Post, 
    new { CustomerNo = (int)ViewBag.CompanyID, 
        VehicleNo = (int)ViewBag.VehicleID }))

在我的视图中我甚至向用户显示ViewBag.CompanyID和ViewBag.VehicleID,因此我知道它们在加载视图时存在。

但是,当我提交表格时,我会得到以下内容:

The parameters dictionary contains a null entry for parameter 'CustomerNo' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Edit(Int32, VehicleAssetTechnicalInformation, Int32, Int32)

由于某种原因,CustomerNo和VehicleNo未作为表单提交。

我可以做些什么来确保传递这些值?

1 个答案:

答案 0 :(得分:2)

据我所知,你无法在之后绑定单个参数,你已经定义了一个模型参数(假设所有参数都属于模型)。我的建议是将所有参数合并到一个视图模型中,例如

public class VehicleSubmissionViewModel
{
    public int Id { get; set; }
    public int CustomerNo { get; set; }
    public int VehicleNo { get; set; }
    public VehicleAssetTechnicalInformation TechnicalInfo { get; set; }
}
...
public ActionResult Edit(VehicleSubmissionViewModel viewModel)
{
    ...
}