2011-06-12 23 views
0

我想顯示三個月的日曆,下一個按鈕顯示下3個月,上一個按鈕顯示前3個月。我的模型包含一個名爲BeginDate的屬性,它的值是當前3個月的第一天的日期。我點擊下一個按鈕,我將三個月添加到BeginDate,並將其綁定到我視圖中的隱藏字段。並用新的BeginDate返回模型,但隱藏字段的值未更改。使用Next和Prev按鈕而不使用任何查詢參數?

我的模型

public class MyModel 
{ 
    public DateTime BeginDate 
    { 
     get; 
     set; 
    } 
} 

我控制器

[HttpGet] 
public ActionResult Index() 
{ 
    return View(new MyModel()); 
} 
[HttpPost] 
public ActionResult Index(MyModel model) 
{ 
    model.BeginDate = model.BeginDate.AddMonths(3);   
    return View(model); 
} 

注意我想做的事情,沒有把任何參數在我的網址

回答

2

你需要從模型狀態中刪除如果您打算在POST操作中修改其值:

[HttpPost] 
public ActionResult Index(MyModel model) 
{ 
    ModelState.Remove("CurrentBegin"); 
    model.CurrentBegin = DateTime.Parse(Request.Form["CurrentBegin"]).AddMonths(3);   
    return Index(model); 
} 

原因是因爲HTML幫助器(如TextBoxFor,HiddenFor,...)將首先查看請求,如果在模型中存在相應的值並且在此之後。因爲您處於POST操作中,所以在POST正文中有舊的CurrentBegin值,隱藏的幫助程序將使用此值,而不是您在模型中使用的值。這是設計,這就是助手的工作方式。如果要使用模型的值並忽略POSTed值,則需要將其從模型狀態中移除,如圖所示。

+0

爲什麼「Html.DisplayFor」例如之前沒有查看請求? – 2011-06-18 15:12:43

+0

@Peter Gfader,因爲一個字符串[默認顯示模板](http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html)屬性看起來像這樣:'@ Html.Encode(ViewData.TemplateInfo.FormattedModelValue)'它基本上使用模型的值而不是模型狀態或請求。 – 2011-06-18 15:18:14

相關問題