控制EditorForModel填充数据的方式

时间:2012-06-08 16:00:39

标签: 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 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.
          }

感谢

1 个答案:

答案 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"/>
}