Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制EditorForModel填充数据的方式_C#_Asp.net Mvc_Asp.net Mvc 3_Html Helper - Fatal编程技术网

C# 控制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

我遇到了这样一种情况,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.
          }

谢谢

嗯,有几种方法可以做到这一点。您可以检查哪个按钮用于提交表单,但这有点复杂

在您的情况下,您可以简单地在表单中添加一个隐藏字段,然后在单击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"/>
}