C# 控制EditorForModel填充数据的方式
我遇到了这样一种情况,EditorForModel通过将提交的数据填充到我的模型中而妨碍了我。让我向您展示让我陷入麻烦的用例 一方面,我有一个可以保存到数据库中的表单:C# 控制EditorForModel填充数据的方式,c#,asp.net-mvc,asp.net-mvc-3,html-helper,C#,Asp.net Mvc,Asp.net Mvc 3,Html Helper,我遇到了这样一种情况,EditorForModel通过将提交的数据填充到我的模型中而妨碍了我。让我向您展示让我陷入麻烦的用例 一方面,我有一个可以保存到数据库中的表单: public class Person { [HiddenInput(...)] public int Id {get; set;} public string Name {get; set;} } 在控制器的另一侧,我有一些操作,允许我记录用户: public class PersonsContro
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.
}
谢谢嗯,有几种方法可以做到这一点。您可以检查哪个按钮用于提交表单,但这有点复杂 在您的情况下,您可以简单地在表单中添加一个隐藏字段,然后在单击addasnew按钮时使用一些javascript设置该字段。类似这样的内容(未测试,但应该是这样的):
@使用(Html.BeginForm()){
@Html.Hidden(“SaveAsNew”、“false”)
}
@using(Html.BeginForm()) {
@Html.Hidden("SaveAsNew", "false")
<input type="submit" value="Save As New" onclick="$('#SaveAsNew').val('true');" />
<input type="submit" value="Save Normally"/>
}