我遇到了一个情况,即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
填充了发布数据中的数据,因此当用户点击“另存为新”时,Id永远不会有机会更改。
所以我想知道是否有某种方法可以清除提交的数据。类似的东西:
if (SaveAsNew)
{
myRepository.Add(p);
myRepository.SaveChange();
Request.ClearPostData();
// p.Id is now a new Value.
}
感谢
答案 0 :(得分: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"/>
}