代码之家  ›  专栏  ›  技术社区  ›  mxmissile

绑定的增量序列DropDownList?

  •  0
  • mxmissile  · 技术社区  · 14 年前

    我正在使用 incremental sequencing for a collection of objects 以某种形式。除了我需要使用DropDownListfor外,所有功能都很好。许多 questions concerning binding a dropdown 并选择正确的值,在我的情况下,这是正常的。但是,我不清楚在我的控制器中HTTPPost操作应该具有什么。这是我的代码:

    模型

    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?
    }
    

    下拉列表被填充得很好,它们被预先选择得很好。但在回发表单.requests.assignedto上为空。我假设车辆识别号被寄回了某个地方,但是我如何才能在不通过 Request 魔法弦:

    var id = Request["Requests[" + i + "].AssignedTo"];
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   AJ.    14 年前

    这里有一种替代方法,因为没有显式的ModelBinder,我也无法绑定子对象:

    为响应定义一个新类:

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

    在页面上更改如下:(我将请求更改为工作请求)

    <% 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....
    }
    

    我很想看看是否有更直接的路线,因为这也困扰着我。