我会说得很简单,这是我得到的代码。
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对象不再存在,我觉得很奇怪。 FetchNonCIStaffByUser(int)
带回一个ContractUser对象(有效)。删除页面显示来自此对象的信息,因此我知道初始条目有效,如果出现错误则只是回发,ContractUser
对象中不显示任何信息。
为什么会发生这种情况?我原本期望contractUser
对象返回到视图。
固定
<%= Html.Hidden("FullName", Model.FullName) %>
<%= Html.Hidden("User_Key", Model.User_Key) %>
这两个字段实际上都没有放在页面中的表单元素中,因此没有任何内容被回发。很高兴知道。
答案 0 :(得分:1)
当调用DeleteNonCIStaffUser
操作时,会从请求中填充contractUser
对象(假设您使用默认的模型绑定器),因此属性将自动绑定到请求中找到的信息。这意味着在调用删除操作时您需要传递contractUser
的所有值(您可以将它们存储在页面中的隐藏字段中)。
另一个选择是只将ID传递给删除操作使用FetchNonCIStaffUserByID填充模型然后删除它当然会进行2分组调用。
答案 1 :(得分:0)
重定向到动作'NonCIStaffUsers'时,您需要解析对象。您可以直接解析它,如:
//...
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正在填充吗?您是否在调试时添加了断点以进行检查?它可能是您视图中的映射问题。