使用mvc4将对象从视图传递到控制器

时间:2017-07-26 06:48:38

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-5

查看

@if (weekMaster != null)
 {
  using (Html.BeginForm("UpdatePlan", "generalPlan", FormMethod.Post, new {  }))
  {
  <table class="table-bordered">
   <tr>
   @foreach (TermMaster obj in weekMaster.ToList())
    {
    <td align="center">
   <span>  @obj.termStartDate.ToString("dd MMM") - @obj.termEndDate.ToString("dd MMM")</span>
    <br />
    <input type="hidden" name="ObjHid" value="@obj" />
    <input type="hidden" name="startDate" value="@obj.termStartDate" />
    <input type="hidden" name="endDate" value="@obj.termEndDate" />
    <input type="text" style="width:80%" name="weekSession" />
  </td>
 }
  <td>
 <input type="submit" value="Update" class="btn-primary" />
  </td>
 </tr>
 </table>
 } }

控制器

   [HttpPost]
    public ActionResult UpdatePlan(List<DateTime> startDate, List<DateTime> endDate, List<int> weekSession, List<TermMaster> ObjHid)
    {
        return View();
    }

我正在尝试使用输入法Class Object from View to Controller在TermMaster类上传递<input type="hidden" name="ObjHid" value="@obj" />,但如果传递单个值NULLstartDate则显示endDate值它工作正常。

我的代码有什么问题?如何在Post方法中传递类对象List?

请参阅图片 enter image description here

2 个答案:

答案 0 :(得分:1)

你必须通过以下方法来实现。

创建模型而不是多个参数,并在cshtml中使用index。

public class model
{
    public List<DateTime> startDate { get; set; }
    public List<DateTime> endDate { get; set; }
    public List<int> weekSession { get; set; }
    public List<TermMaster> ObjHid { get; set; }
}

CSHTML

@{ int i = 0; }
@foreach (TermMaster obj in weekMaster.ToList())
    {
    <td align="center">
   <span>  @obj.termStartDate.ToString("dd MMM") - @obj.termEndDate.ToString("dd MMM")</span>
    <br />

    <input type="hidden" name="ObjHid[@i].termStartDate" value="@obj.termStartDate.ToString("dd MMM")" />
    <input type="hidden" name="ObjHid[@i].termStartDate" value="@obj.termStartDate.ToString("dd MMM")" />

    <input type="hidden" name="startDate[@i]" value="@obj.termStartDate" />
    <input type="hidden" name="endDate[@i]" value="@obj.termEndDate" />
    <input type="text" style="width:80%" name="weekSession[@i]" />
  </td>

   i++
 }

答案 1 :(得分:0)

您无法通过输入将对象绑定到控制器。您可以将对象序列化为json。在控制器中,您可以将输入值作为字符串并反序列化。