填充并将复杂对象从MVC2视图传递到控制器操作

时间:2011-06-02 07:29:35

标签: asp.net-mvc-2 entity-framework-4

我的MVC2视图中有以下代码:

<tr class="edit" style="display:none">
    <td>
        <%= Html.DropDownList("drpFields", new SelectList(Model.Fields, "FieldID", "NiceName", whiteout.FieldID)) %>      
    </td>
    <td>
        <%= Html.DropDownList("drpStartTimeh", new SelectList(Model.Hours, whiteout.StartHour.Hour.ToString("0,0")))%>
        <%= Html.DropDownList("drpStartTimem", new SelectList(Model.Minutes, whiteout.StartHour.Minute.ToString("0,0")))%>
        <%= Html.DropDownList("drpStartTimet", new SelectList(Model.AMPM, whiteout.StartHour.Hour > 12 ? "PM" : "AM"))%>
        -
        <%= Html.DropDownList("drpEndTime", new SelectList(Model.Hours, whiteout.EndHour.Hour > 12 ? (whiteout.EndHour.Hour - 12).ToString("0,0") : whiteout.EndHour.Hour.ToString("0,0")))%>
        <%= Html.DropDownList("drpEndTimem", new SelectList(Model.Minutes, whiteout.EndHour.Minute.ToString("0,0")))%>
        <%= Html.DropDownList("drpEndTimet", new SelectList(Model.AMPM, whiteout.EndHour.Hour > 12 ? "PM" : "AM"))%>
    </td>
    <td>
      <%= Html.DropDownList("drprepeat", new SelectList(Model.RepeatList,whiteout.Repeats))%>
    </td>
    <td>
     Active
    </td>
    <td>            
             <a class="icon-button-cancel" href='<%: Url.Action("EditWhiteOut", "Settings", new {Id = whiteout.WhiteoutID}) %>'>
    <img src='<%: Url.Content("~/static/Images/expanded.png") %>' alt="Delete this device" />
</a>
            <a class="icon-button-success" href="#">
            <img src="/static/images/gear.png" alt="Edit this device" /></a>
    </td>
    <td>    
    </td>
</tr>

我想创建一个Whiteout类型的对象,并使用用户从下拉列表中选择的值填充它,并发送到settingcontroller的EditWhiteout操作方法,而不是仅传递新的{Id = whiteout.WhiteoutID}。我怎么能这样做?

请建议解决方案。

感谢。

1 个答案:

答案 0 :(得分:0)

MVC提供了一些表单值的自动映射,从视图返回到控制器操作。通常你会使用强类型视图,即在页面顶部你会有一些东西 喜欢 Control Language="C#" Inherits="System.Web.Mvc.ViewPage<namespace.Whiteout>

下拉列表的名称需要与Whiteout类中的属性相匹配,并且控制器操作将期望模型类型的返回值,即

 [HttpPost]
 public ActionResult EditWhiteout(WhiteOut tseItem)
 { //method body here

剩下的应该就像魔法一样。如果您对下拉菜单感到困惑,有时更容易用简单的输入替换它们,直到您将发送/接收部分工作 - 然后更改为下拉列表。