0

我有一个名为 Documents 的控制器,它具有三种操作方法:

 public ActionResult Save(string returnUrl){
      TempData["returnUrl"]=returnUrl;
      return View(viewName: "Save");
 }


 [HttpPost]
 public ActionResult Save(string returnUrl){     
      return Redirect(returnUrl); 
 }

 [HttpPost]
 public ActionResult Cancel(string returnUrl){     
      return Redirect(returnUrl);
 }

这是 Save.cshtml 视图的内容:

 @Html.Hidden(TempData["returnUrl"].ToString())
 @using (Html.BeginForm){
    <!--Some html here-->
    <input type="submit" value="Save"/>
 }

 @using (Html.BeginForm(actionName:"Cancel",controllerName:"Documents")){
     <input type="submit" value="Cancel"/>
 }

当然,上面的代码并不能反映我在现实世界中需要做什么,但是一个问题让我把我的代码剥离到这个最简单的阶段。问题是当我调用操作方法returnUrl时参数为空。Cancel这是为什么?

4

1 回答 1

1

为了回发到FormCollection,与表单关联的输入需要位于<form>标签内(除非使用form 属性)。在您有 2 个表单并需要回发 的值的情况下returnUrl,您需要 2 个输入。如果使用 html 帮助器,这将创建具有重复 id 的元素。例如,更好的方法是将值包含在表单元素中

控制器

[HttpGet]
public ActionResult Save(string returnUrl)
{
  ViewBag.ReturnUrl = returnUrl;
  return View("Save");
}

[HttpPost]
public ActionResult Save(string returnUrl, MyModel, model)
{
  ....
}

[HttpPost]
public ActionResult Cancel(string returnUrl, MyModel, model)
{
  ....
}

看法

@using (Html.BeginForm("Save", "Documents", new { ReturnUrl = ViewBag.ReturnUrl })) {
  ....

@using (Html.BeginForm("Cancel", "Documents", new { ReturnUrl = ViewBag.ReturnUrl })) {
  ....
于 2014-08-19T22:56:16.470 回答