我的秃头增长得比应有的快。我几天前刚发布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吗?
答案 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
仍然有效。我将在稍后修复,并在我的网站上发布代码示例和解决方案。