2010-04-08 42 views
0

我有這個模型狀態地獄 - Model.A如何同時成爲兩件不同的事情?

<%=Model.StartDate%> 
<%=Html.Hidden("StartDate", Model.StartDate)%> 

它輸出:

2010-05-11 11:00:00 +01:00  
<input type="hidden" value="2010-03-17 11:00:00 +01:00" name="StartDate" id="StartDate"> 

什麼...

這是一個分頁機制,使隱藏的價值是在第一頁上有效,我已經能夠前進到下一頁。但是由於這些值不會正確更新,所以在那裏結束。

我需要做什麼?

使用firefox。

更新 - 更多的代碼

using (Html.BeginForm("Program", "Activities", null, FormMethod.Get, new { @name = "ProgramForm", id = "ProgramForm" })) 
{ 

 viewModel.StartDate = pagingService.StartDate; 
     return View(viewModel); 

更新 - 完整的動作

[Authorize] 
    public ActionResult Program(string[] submit) 
    { 
     var viewModel = new ActivityProgramViewModel { UserID = LoggedInUser.UserID }; 
     viewModel.Fresh = true; 

     TryUpdateModel(viewModel); 

     var pagingService = new OccurencePagingService(LoggedInUser.AllActivities.Where(a => a.StartTime != null)); 

     if (!viewModel.Fresh) 
     { 
      pagingService.StartDate = ((DateTimeOffset)viewModel.StartDate); 
      pagingService.EndDate = ((DateTimeOffset)viewModel.EndDate); 
     } 

     if (submit != null) 
      if (submit.Contains("MoveBack")) 
       pagingService.MoveBack(); 
      else if (submit.Contains("MoveForward")) 
       pagingService.MoveForward(); 

     ViewData.Model = viewModel; 

     viewModel.Occurrences = pagingService.GetOccurences(); 
     viewModel.Fresh = false; 

     viewModel.HasLess = pagingService.HasLess; 
     viewModel.HasMore = pagingService.HasMore; 

     viewModel.StartDate = pagingService.StartDate; 
     viewModel.EndDate = pagingService.EndDate; 

     return View(); 
    } 
+0

什麼是核心日期:2010-05-11或2010-03-17? – 2010-04-08 11:36:07

+0

前者..... – Martin 2010-04-08 11:57:38

+0

請給我們展示一些更多的代碼:)你以某種方式發送StartDate。 pagingService.StartDate來自哪裏? – LukLed 2010-04-08 13:49:54

回答

0

我認爲<%= Html.Hidden(「StartDate」,Model.StartDate)%>在這裏不合適。

Html Helpers嘗試通過檢查帖子/路由數據來保存UI中的數據。請不要問我有人會在隱藏的領域輸入數據。

你想要一些不同的東西:你想將數據設置爲Model.StartDate並且不在意post/route中的內容。我會使用<input value="<%=Model.StartDate%>" name="StartDate" />

+0

這就是我目前正在做的。我認爲這是一個騙子/黑客。但是你去了。 – Martin 2010-04-08 21:59:45

4

第一個使用模型對象,第二個利用現有的ModelState。在生成視圖之前查看ModelState值。它可以持有這個領域的價值。由MVC指定的Html助手使用ModelState生成表單域。它有助於在發佈後重新創建值。

要擺脫這種問題,請使用POST-REDIRECT-GET模式或通過GET傳遞查詢參數。

+0

我很明顯在這裏錯過了一些東西。 ModelState [「StartDate」]保存被放置到隱藏元素的值,我不想要的值。那麼你會讓我做什麼?我很驚訝,因爲我現在一直在做這種事情,而且我不明白我在這個觀點上做了什麼不同。 – Martin 2010-04-08 10:44:24

+0

@Martin:你爲什麼發佈這個隱藏的價值?如果您必須發佈此值,請使用重定向並僅傳遞必要的值。 – LukLed 2010-04-08 10:48:01

+0

你說得對,我不知道。改變了方法得到,但它沒有區別。 PRG模式似乎有點超過頂部。我只是分頁。只有viewmodel正在更新。 – Martin 2010-04-08 10:54:18

相關問題