2010-03-30 60 views
0

我在表單中使用incremental sequencing for a collection of objects。除了當我需要使用DropDownListFor時,所有的工作都很好,並且很漂亮。很多questions concerning binding a dropdown和選擇正確的值,這在我的情況下工作正常。然而,我不清楚應該在我的控制器中的HttpPost動作。這裏是我的代碼:遞增排序DropDownListFor綁定?

型號

public class WorkRequestList 
{ 
    public WorkRequest[] Requests { get; set; } 
    public Vehicle[] Vehicles { get; set; }  
} 

查看

<% using (Html.BeginForm()) {%> 
    <% for (var i = 0; i < Model.Requests.Count(); i++) { %> 
     <%=Html.DropDownListFor(x => x.Requests[i].AssignedTo,new SelectList(Model.Vehicles,"Id","Name",Model.Requests[i].AssignedTo.Id)) %> 
     <%}%> 
<%=Html.SubmitButton("TopSubmit","Submit") %> 
<%}%> 

發佈行動

[HttpPost] 
public ActionResult Schedule(WorkRequestList form) 
{ 
     //what goes here? 
} 

的dropdo列表填充得很好,他們得到預選就好了。但在發表回覆form.Requests.AssignedTo爲空。我假設車輛ID被調回地方,但我如何才能到,而不訴諸通過Request魔術字符串循環:

var id = Request["Requests[" + i + "].AssignedTo"]; 

回答

1

這裏是另一種方法,因爲我無法得到約束子對象或者沒有一個明確的模型綁定器:

定義一個新類你的迴應:

public class WorkRequestResponse 
{ 
    public int AssignedTo { get; set; } 
} 

在頁面變化,如下所示:(我改變請求WorkRequest)

<% for (var i = 0; i < Model.WorkRequest.Count(); i++) 
     { %> 
    <%=Html.DropDownListFor(x => x.WorkRequest[i].AssignedTo, new SelectList(Model.Vehicles, "Id", "Name", Model.WorkRequest[i].AssignedTo.Id))%> 
    <%}%> 

在您的控制器綁定如下:

public ActionResult Index([Bind(Prefix = "WorkRequest")]List<WorkRequestResponse> AssignedTo) 
{ 
    // AssignedTo is now populated 
    WorkRequestList.WorkRequests = magic_assign_function(AssignedTo); 
    // manual model validation etc.... 
} 

我會敏銳地看到,如果有一個更直接的路線,因爲這一直困擾着我。

+0

我寫了一個巨大的醜陋模型綁定器,我正在使用。這看起來像一個更好的方法,會嘗試一下。 – mxmissile 2010-03-31 13:41:58

+0

這太酷了,謝謝,讓MVC變得更加簡單。 – mxmissile 2010-03-31 14:53:32