表单操作发布null

时间:2010-11-19 20:43:23

标签: asp.net-mvc controller

我的秃头增长得比应有的快。我几天前刚发布this question。我现在知道这个问题并让它工作......有点儿。另一个问题出现在它的位置。

要解决上一个问题,我手动将名称创建为requestedDays[{0}].DateOfLeave,其中{0}Guid。这允许我的控制器正确地接收List<>价值观。

使用this article's method,生成的名称为requestedDays[{0}].DayRequested.DateOfLeave,我的控制器无法正确接收该名称,因为名称中包含类DayRequested.DateOfLeave

    [Authorize, HttpPost]
    public ActionResult Create(LeaveRequest leaveRequest, List<DayRequested> requestedDays)
    {
    }

我试图找出手动生成的解决方法,但到目前为止我没有尝试过任何工作。 You can see my validation method here。我确实知道second part of Sanderson's article on validation但是,很难验证那些没有传递给方法的东西。

这是我在部分视图中使用的ViewModel。

public class LeaveRequestRow
{
    public LeaveRequestRow(DayRequested dayRequested, List<SelectListItem> leaveRequestType)
    {
        this.DayRequested = dayRequested;
        this.LeaveRequestType = leaveRequestType;
    }

    public List<SelectListItem> LeaveRequestType { set; get; }
    public DayRequested DayRequested { set; get; }
}

有没有人对如何进行有任何想法?我应该将我的下拉列表转换为jQuery构建控件并停止使用ViewModel吗?

2 个答案:

答案 0 :(得分:0)

绑定复杂类型的1-N控制器参数可能有点棘手。

你的代码示例并没有与我星期五大脑的结束时间相关,但我会试一试。

假设LeaveRequest类看起来像这样:

public class LeaveRequest {
    public string Text { get; set; }
    public string Number { get; set; }
}

发布的表单密钥必须是:

leaveRequest.Text
leaveRequset.Number

这很容易。 DayRequested列表的1-N绑定有点奇怪。假设DayRequested对象如下所示:

public class DayRequested  {
    public string Words { get; set; }
    public string Data { get; set; }
}

您发布的表单键如下:

requestedDays[0].Data
requestedDays[0].Words
requestedDays[1].Data    
requestedDays[1].Words
requestedDays[2].Data    
requestedDays[2].Words
requestedDays[3].Data    
requestedDays[3].Words

然后,默认的MVC绑定器应该将所有10个表单值转换为两个方法参数...一个POCO和一个POCO列表。

答案 1 :(得分:0)

我已经解决了这个问题,但并不像我希望的那样优雅。所有TextBoxFor都必须更改为TextBox以及执行此操作所需的附加更改。然后正确生成名称,我可以继续前进。这确实打破了验证消息显示在字段旁边的能力,尽管ValidationSummary仍然有效。我将在稍后修复,并在我的网站上发布代码示例和解决方案。