Asp.net mvc 在HttpPost中将对象传递回视图
我会让它变得简单,这是我的代码Asp.net mvc 在HttpPost中将对象传递回视图,asp.net-mvc,Asp.net Mvc,我会让它变得简单,这是我的代码 public ActionResult DeleteNonCIStaffUser(int id) { return View(_contractsControlRepository.FetchNonCIStaffUserByID(id)); } [HttpPost] public ActionResult DeleteNonCIStaffUser(ContractUser contractUser) { try {
public ActionResult DeleteNonCIStaffUser(int id)
{
return View(_contractsControlRepository.FetchNonCIStaffUserByID(id));
}
[HttpPost]
public ActionResult DeleteNonCIStaffUser(ContractUser contractUser)
{
try
{
_contractsControlRepository.DeleteNonCIStaffUser(contractUser.User_Key);
return RedirectToAction("NonCIStaffUsers"); // never reaches this as an exception is thrown!
}
catch
{
ViewData["ExceptionMessage"] = "Exception caught!";
return View(contractUser); // I'm expecting this statement to return the ContractUser object instantiated with the same data as the GET action.
}
}
HttpPost
包含ContractUser
对象。回发后,我什么也没有留下,contractUser对象不再存在,这让我觉得很奇怪fetchnonistaffByUser(int)
返回一个ContractUser对象(该对象有效)。“删除”页面显示来自此对象的信息,因此我知道初始条目起作用,如果出现错误,它只是回发,不会显示来自ContractUser
对象的任何信息
知道为什么会这样吗?我希望contractUser
对象返回到视图中
固定的
<%= Html.Hidden("FullName", Model.FullName) %>
<%= Html.Hidden("User_Key", Model.User_Key) %>
这两个字段实际上都没有放在页面的表单元素中,因此没有任何内容被发回。很高兴知道。当重定向到“NonSistaffUsers”操作时,需要解析对象。您可以直接解析它,如下所示:
//...
return RedirectToAction("NonCIStaffUsers", new { user = contractUser });
//...
public ActionResult NonCiStaffUsers(ContractUser user) {
//...
}
或者使用TempDataDictionary:
//...
TempData["user"] = contractUser;
return RedirectToUser("NonCIStaffUsers");
//...
public ActionResult NonCiStaffUsers() {
ContractUser user = TempData["user"] as ContractUser;
//...
}
编辑
对不起,我误解了这个问题。您确定contractUser已正确填充吗?您是否在调试时添加了断点以进行检查?在您看来,这可能是一个映射问题。当调用
deleteNonSistaffUser
操作时,将从请求中填充contractUser
对象(前提是您使用默认的模型绑定器),因此属性将根据请求中找到的信息自动绑定。这意味着您需要在调用删除操作时传递contractUser
的所有值(您可以将它们存储在页面中的隐藏字段中)
另一种选择是只将ID传递给delete操作,使用fetchnonistaffUserByID填充模型,然后将其删除,这当然会进行2 db调用。它从未到达该语句,因此我在
返回视图(contractUser)中引用了contractUser
代码>我用代码中的一些注释更新了我的帖子,我知道这可能有点模糊。知道你可以通过RedirectToAction传递对象很方便。对不起,我误解了这个问题。您确定contractUser已正确填充吗?您是否在调试时添加了断点以进行检查?在您看来,这可能是一个映射问题。Doh,对不起,这是正确的。看我的修正,你是对的。