2015-09-09 41 views
2

我顯示列表中的房間僅用於顯示,如果用戶對顯示很滿意,他們可以將其導出爲pdf(它們不能改變任何東西)頁雖然)MVC模型子列表null在帖子上,除非使用TextBoxFor

我的主要問題是,當我提交表單時,房間爲空。

現在我知道如果我將@Html.ValueFor更改爲@Html.TextBoxFor等併發布表單,Rooms具有一個值,這很好,但我不希望在此頁面上顯示文本框,標籤或值是我所需要的。
我試過@Html.DisplayTextFor,但它是相同的結果,在房間爲空。
有人可以建議我如何能夠實現我所需要的?

控制器

[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

您可以隱藏包含這些值的字段,這些字段將被提交但不可見,或者您可以使用帶有'readonly'屬性的文本框來顯示。 – markpsmith

+0

帶有隻讀屬性的文本框也是我的想法,我並不是真的想要加載隱藏的字段,但是如果沒有其他方式,那麼足夠公平 – Thunderchild

+0

您不應該生成隱藏的輸入。您向客戶端發送了大量額外的數據,然後再次將所有數據恢復原樣(降低性能並打開自己以過度發佈攻擊)。在POST方法中,如果需要,再次從存儲庫獲取集合 –

回答

0

只有某些HTML元素ACTU盟友得到提交,如輸入和選擇列表。如果你只是在屏幕上顯示文本,那麼這將永遠不會使用瀏覽器的表單提交提交。

選項

使用Html.HiddenFor幫手
  1. 使用隱藏域(此生成得到提交的隱藏輸入)
  2. 使用AJAX,這將給你更多的靈活性,在什麼樣的數據被髮送到控制器

他們不能在該網頁上做任何更改,雖然

整個HTML標記在客戶端上,所以他們可以改變他們想要的任何東西!如果您擔心這一點,您應該考慮讓您的控制器從會話/數據庫中檢索預訂數據。

+0

是的,我瞭解我認爲選項1是感謝的方式 – Thunderchild