HttpPost方法接收错误的数据?



我有两个方法:

public ActionResult EditNote(int? id)
{
NotesModel edit = NotesProcessor.LoadNote(Convert.ToInt32(id));
if (edit.Author != Session["UserName"].ToString())
{
edit.Id = null;
edit.Title = null;
edit.Note = null;
edit.Author = null;
return View(edit); 
}
return View(edit);          
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult EditNote(NotesModel model)
{            
if(model.Id == null) NotesProcessor.SaveNoteEdit(model);
else
{
model.Author = Session["UserName"].ToString();
NotesProcessor.SaveNote(model);
}
return View();
}

我已经简化了代码,只显示有问题的部分:

一个已登录的用户正在尝试编辑一个他们不允许的笔记,因为它是由另一个用户做的。所以所有的值都被设置为空,这样用户就会创建一个新的笔记。第一个方法将接收一个id,用于在数据库中搜索用户试图编辑的注释。

在下一个HttpPost方法然而模型。尽管在第一个方法中将所有值更改为null,但Id仍然与第一个方法接收到的整数相同。

第一个方法从视图页面调用,如下所示:

@Html.ActionLink("Edit", "EditNote", new { id = Model.Id })

有人知道这是怎么回事吗?

你实际上并没有发布任何东西到系统,因为它看起来,你只是通过URL调用HttpGet方法,然后在页面级别清除视图模型数据。看来你的HttPost方法甚至没有击中。试着调试,看看你的HttpPost方法是否被击中。

您甚至不需要为您想要实现的目标创建两个方法。你所需要的只是一个HttpPost方法。

要调用HttpPost方法,你需要在UI级别创建窗体控件,动作类型为post,或者你需要通过JavaScript/JQuery点击HttpPost方法

我希望这对你有帮助。