Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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
Asp.net mvc 在HttpPost中将对象传递回视图_Asp.net Mvc - Fatal编程技术网

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,对不起,这是正确的。看我的修正,你是对的。