除非使用TextBoxFor,否则MVC模型子列表在post上为null

时间:2015-09-09 13:16:11

标签: c# asp.net-mvc

我在表格中显示列表只是为了显示,如果用户对显示感到满意,他们可以将其导出为pdf(虽然这些页面不能改变任何内容)

我的主要问题是,当我提交表单时,Rooms为空。

现在我知道,如果我将@Html.ValueFor更改为@Html.TextBoxFor等并发布表单,则会有一个值,这很好,但我不希望在此页面上显示文本框,标签或价值观是我所需要的 我尝试了@Html.DisplayTextFor,但结果相同,在Rooms中为null 任何人都可以建议我如何实现我的需要吗?

控制器

   [HttpPost]
   public ActionResult GeneratePdf(CommissionReportViewModel model)
   { 
       // Some other processing
   }

视图模型

public class CommissionReportViewModel : ApiCredentials
{
    public string Organiser { get; set; }

    public string EventName { get; set; }

    public string EventDate { get; set; }

    public BookingPages Bookings { get; set; }

    public double TotalCommission { get; set; }

    public string CurrencyCode { get; set; }
    public List<CommissionReportRooms> Rooms { get; set; }
}

查看

    @for(var i = 0; i < Model.Rooms.Count();i++)
    {

        <tr>
            <td>@Html.ValueFor(m => Model.Rooms[i].DelegateName)</td>
            <td>
                @Html.ValueFor(m => Model.Rooms[i].FirstDate, "{0:dd MMM yyyy}")

        </td>
            <td>@Html.ValueFor(m => Model.Rooms[i].Nights)</td>
            <td>@Html.ValueFor(m => Model.Rooms[i].RoomType)</td>
            <td>@Html.ValueFor(m => Model.Rooms[i].GrossTotal,  "{0:0.00}") @Html.DisplayTextFor(m => Model.Rooms[i].Currency)</td>
            <td>@Html.ValueFor(m => Model.Rooms[i].Rate, "{0:0.00}%")</td>
            <td>@Html.ValueFor(m => Model.Rooms[i].Commission, "{0:0.00}") @Html.DisplayTextFor(m => Model.Rooms[i].Currency)</td>
            <td></td>

        </tr>
    }

1 个答案:

答案 0 :(得分:0)

实际上只提交了某些HTML元素,例如输入和选择列表。如果您只是在屏幕上显示文字,那么将永远不会使用浏览器的表单提交来提交。

选项

  1. 使用隐藏字段使用Html.HiddenFor帮助程序(这会生成已提交的隐藏输入)
  2. 使用AJAX,可以更灵活地将数据发送到控制器
  3.   

    虽然

    ,但他们无法更改此页面上的任何内容

    整个HTML标记在客户端上,因此他们可以更改他们想要的任何内容!如果您对此感到担心,您应该考虑让您的控制器从会话/数据库中检索预订数据。