我是MVC4的新手,可能会欣赏一些额外的手握。提前谢谢!
我的项目以强烈输入TicketNumbers的页面开头。在该视图上,用户可以选择任意数量的50个复选框。然后将它们的选择传递给下一个控制器GenerateCombosController。
public class TicketNumbers
{
public string Name { get; set; }
public List<bool> Numbers { get; set; }
public TicketNumbers() {
Numbers = new List<bool>();
for (int i = 0; i < 50; i++) // default 50 for this example
{
Numbers.Add(false);
}
}
}
在GenerateCombosController中,您看到我正在使用ReportCombinations存储刚刚提交的TicketNumbers。然后将ReportCombinations rc传递给强烈键入ReportCombinations的视图。
public ActionResult Index(TicketNumbers tn)
{
ReportCombinations rc = new ReportCombinations();
rc.Numbers = tn;
// ... plus some other default attributes for ReportCombinations rc
return View(rc);
}
public ActionResult Submit(ReportCombinations rc)
{
// do stuff here with rc's attributes
// however rc.Numbers is null! :(
return View("Index", rc);
}
如您所见,我希望在用户对ReportCombinations的属性进行一些更改后,将ReportCombinations对象提交回相同的“索引”视图。我当然得到了那些改变的属性但是rc.Numbers返回为null。 &GT;&GT;理想情况下,当用户更改rc的属性时,用户将能够继续提交相同的页面以查看不同的结果。
我已经尝试将视图中的rc.Numbers属性(字符串名称和列表编号)作为隐藏值,但如果这是必需的话,似乎无法正确使用它?使用ViewModel会有所作为吗?我也看过TicketNumbers会被放置在会话中的示例,并在以下方法中重新出现,但在我看来,这几乎不是优雅的。
答案 0 :(得分:0)
使用jQuery并实现您自己的提交,您可以使用$.ajax()
POST到控制器。
var yourObjectData = { Name: "Name", Numbers: [1,2,3,4,5] }
$.ajax({
url : "Controller/Submit",
type: "POST",
data : yourObjectData ,
success: function(data, textStatus, jqXHR)
{
//data - response from server
}
});
显然还有更多的代码要做,但这就是你可以手动构建模型对象的方法