2011-07-28 106 views
4

我想用一些字段(示例中的一個)顯示錶單,提交它,保存並顯示同一頁面,並重置所有字段。當我提交萬阿英,蔣達清,我走了「保存」動作,但是當我顯示視圖的形式依然瀰漫在保存後顯示相同的頁面

模型:

public class TestingModel 
{ 
    public string FirstName { get; set; } 
} 

控制器:

public class ChildController : Controller 
{ 
    public ActionResult Index() 
    { 
     TestingModel model = new TestingModel(); 
     return View(model); 
    } 

    public ActionResult Save(TestingModel model) 
    { 
     Console.WriteLine(model.FirstName); //OK 

     //Save data to DB here ...   

     TestingModel testingModel = new TestingModel() { FirstName = string.Empty }; 
     return View("Index", testingModel); 
    } 
} 

的視圖:

@using (Html.BeginForm("Save", "Child",FormMethod.Post)) 
{ 
    @Html.TextBoxFor(m => m.FirstName) 
    <input type="submit" id="btSave" /> 
} 

當Id調試到視圖,在「Immediat窗口」Model.FirstName = "",但是當頁面顯示時,我仍然有張貼的值。我在Save方法的末尾嘗試了ReditrectionToAction("Index"),但結果相同。

你有什麼想法嗎?

感謝,

回答

11

如果您想要做到這一點,您需要清除ModelState中的所有內容。否則,HTML助手將完全忽略您的模型,並在綁定其值時使用來自ModelState的數據。

像這樣:

[HttpPost] 
public ActionResult Save(TestingModel model) 
{ 
    //Save data to DB here ...   

    ModelState.Clear(); 
    TestingModel testingModel = new TestingModel() { FirstName = string.Empty }; 
    return View("Index", testingModel); 
} 

或簡單地重定向到索引GET行動成功的情況下:

[HttpPost] 
public ActionResult Save(TestingModel model) 
{ 
    //Save data to DB here ...   
    return RedirectToAction("Index"); 
} 
+0

謝謝Darin :)我的示例正在工作,現在嘗試在真正的項目中,敬請期待:) –

+1

@ Kris-l肯定會在真正的項目中工作。 ModelState具有模型的值提供者的最高優先級。當您第一次發佈模型時,ModelState會填充您發佈的值。然後,無論您是向您提供new()模型還是提供null值,ModelState都已經包含您之前發佈的模型中的值,並使用這些值(最高優先級)填充新模型。因此,您可以在視圖中獲得相同的模型值。但是,當清除模型狀態並傳遞new()模型進行查看時,您確實會獲得新估計的模型。 – archil

0

嘗試返回Index觀點沒有任何模型

return View("Index"); 
+0

我得到相同的結果 –

+0

你緩存視圖?或者可能是你的瀏覽器做的 –

+0

不是瀏覽器緩存麻煩,我試過在Firefox上使用(一般使用Chrome)同樣的結果。 –

0

你應該可以發佈您的形式回到同一ActionResult

public ActionResult Index() 
    { 
     TestingModel model = new TestingModel(); 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(TestingModel model) 
    { 
     Console.WriteLine(model.FirstName); //OK 

     //Save data to DB here ...   


     return RedirectToAction("Index"); 
    } 

您將能夠使用BeginForm也無參數過載

@using(Html.BeginForm()) 
{ 
    //form 
} 
相關問題