0

我遇到了这样一种情况,即 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,这些 Javascript 会根据您单击“保存”或“另存为新”来更新隐藏的输入。

但是我在这里遇到了麻烦,因为EditorForModel从发布的数据中填充数据,所以当用户点击“另存为新”时,Id 永远没有机会改变。

所以我想知道是否有某种方法可以清除提交的数据。就像是:

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

谢谢

4

1 回答 1

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"/>
}
于 2013-05-19T10:12:21.090 回答