2011-06-02 50 views
11

我有用於添加簡單實體的MVC表單。我正在使用TextBoxFor(model => model.FieldName)來創建輸入字段。我有一個保存按鈕和一個保存和新建按鈕。保存和新建按鈕應該回發到保存操作,然後返回當前的視圖和一個空的模型,以使用戶能夠添加另一個實體。但是,會發生的是,即使模型確實是空的,輸入字段也會使用爲前一個實體輸入的值生成。希望這是有道理的。即使模型值爲空,TextBoxFor Helper仍保留以前的值

我知道我可以做一個重定向,但這看起來像一個醜陋的解決方法,所以如果有人遇到過這個,我真的很感激一些輸入。

謝謝。

+0

你可以發佈一些你的代碼嗎?理想的行動。 – ataddeini 2011-06-03 00:05:28

+0

不確定你應該在POST按鈕上進行新的按鈕操作。該操作應該是GET請求。 – Paul 2011-06-03 00:09:00

回答

13

問題在於您的ViewData.ModelState仍然使用原始帖子中的值填充,即使Model爲空,並且您沒有明確地將任何值傳遞到您的視圖中。

我其實並不想重定向到原來的動作是醜陋的解決方案,但如果你不想這樣做,那麼清除出ViewData應該爲你工作:

[HttpPost] 
public ActionResult Save(TestModel model) 
{    
    ViewData = null; 
    return View(); 
} 
+0

謝謝!說得通。 – sydneyos 2011-06-14 04:10:36

1

我有同樣的問題在這裏看到:

Updating value provider prior to TryUpdateModel

但是 - 帖子後 - 如果它是成功的,你應該設計被重定向到一個GET操作你的下一個DAT一個。這是mvc使用的PRG(post-redirect-get)模式的一部分。助手假定您正在使用此模式,並且如果您在帖子後顯示信息,則必須出現錯誤,以便重新顯示「更正」的發佈值。儘量不要解決這個問題 - 但要重構你的代碼以正確地使用PRG。

+0

這不是沒有效率嗎?重定向不會導致從客戶端到服務器的額外往返並返回?或者,RedirectToAction不是這種情況嗎? – sydneyos 2011-06-14 04:10:04

+0

定義'低效'?它的設計工作方式更簡潔。許多web表單應用程序在回發時顯示數據時,如果再次加載數據,則無法正確反映它的外觀。 MVC通過重定向到你的get來解決這個問題。它更乾淨,客戶端也可以按f5,而不會出現客戶端不知道的瀏覽器可怕的警告消息。 – 2011-06-14 04:23:41

5

我會建議使用的

ModelState.Clear(); 

代替

ViewData = null; 

因爲我發現這更清楚你正在嘗試做的。雖然兩者都會完成你想要做的事情。