2012-06-08 34 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"/> 
}