2012-06-08 41 views
0

我遇到了EditorForModel通過向我的模型填充提交的數據進入我的方式的情況。讓我告訴你那個讓我陷入困境的用例。控制EditorForModel填充數據的方式

一方面我有一個表格,可以保存到數據庫:

public class Person { 
    [HiddenInput(...)] 
    public int Id {get; set;} 

    public string Name {get; set;} 
} 

在我的控制器中的另一邊,我有一些動作,讓我記錄用戶:

public class PersonsController { 

    public ActionResult User(bool SaveAsNew, Person p) 
    { 
      if (SaveAsNew) 
      { 
       myRepository.Add(p); 
       myRepository.SaveChange(); 
       // p.Id is now a new Value. 
      } 
      else { 
       Person updateMe = myRepository.Query() 
         .Where(repoP => repoP.Id = p.Id) 
         .First(); 
       updateMe.UpdateWith(p) 
       myRepository.SaveChange(); 
      } 
      return PartialView(p); 
    } 
} 

在視圖方面,我打電話給@Html.EditorForModel()和一些Javascript,它會更新隱藏的輸入,具體取決於您點擊「保存」還是「另存爲新的」。

但是我在這裏遇到麻煩,因爲EditorForModel從發佈的數據中填充數據,所以當用戶點擊「Save as New」時,Id永遠不會有機會改變。

所以我想知道是否有某種方式來清除提交的數據。喜歡的東西:

  if (SaveAsNew) 
      { 
       myRepository.Add(p); 
       myRepository.SaveChange(); 
       Request.ClearPostData(); 
       // p.Id is now a new Value. 
      } 

感謝

回答

0

嗯,有幾種方法可以做到這一點。您可以查看哪個按鈕用於提交表單,但這有點複雜。

在你的情況下,你可能會發現,你只需在你的表單中添加一個隱藏字段,然後在點擊添加爲新按鈕時使用一些javascript來設置該字段。像這樣的東西(未經測試,但它應該是這樣的):

@using(Html.BeginForm()) { 
    @Html.Hidden("SaveAsNew", "false") 

    <input type="submit" value="Save As New" onclick="$('#SaveAsNew').val('true');" /> 
    <input type="submit" value="Save Normally"/> 
}