将多个参数传递给操作

本文关键字:操作 参数传递 | 更新日期: 2023-09-27 17:49:30

我试图通过这样做将多个参数传递到我的控制器中的一个动作:

@Html.ActionLink("Set", "Item", "Index", new { model = Model, product = p }, null)

我的动作方法是这样的:

public ActionResult Item(Pro model, Pro pro)
{
   ...
}

问题在于动作方法中的modelproductToBuy变量在调用该方法时都是null。怎么会?

将多个参数传递给操作

不能发送复杂对象作为路由参数。因为它在传递给动作功能时被转换成查询字符串。所以总是需要使用基本数据类型

它应该看起来像下面(示例)

@Html.ActionLink("Return to Incentives", "provider", new { action = "index", controller = "incentives" , providerKey = Model.Key }, new { @class = "actionButton" })

你的路由表应该如下所示:由基本数据类型组成。

 routes.MapRoute(
     "Default", // Route name
     "{controller}/{action}/{id}", // URL with parameters
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

解决方案1

你可以发送模型的Id作为ActionLink的参数,然后从数据库中获取必要的对象,以便在控制器的动作方法中进行进一步处理。

解决方案2

可以使用TempData将对象从一个Action Method发送到另一个Action Method。简单来说就是在控制器动作之间共享数据。您应该只在当前和后续的请求中使用它。

作为一个例子

public class CreditCardInfo
{
    public string CardNumber { get; set; }
    public int ExpiryMonth { get; set; }
 }

操作方法

[HttpPost]
public ActionResult CreateOwnerCreditCardPayments(CreditCard cc,FormCollection frm)
  {
        var creditCardInfo = new CreditCardInfo();
        creditCardInfo.CardNumber = cc.Number;
        creditCardInfo.ExpiryMonth = cc.ExpMonth;
             
    //persist data for next request
    TempData["CreditCardInfo"] = creditCardInfo;
    return RedirectToAction("CreditCardPayment", new { providerKey = frm["providerKey"]});
  }

 [HttpGet]
 public ActionResult CreditCardPayment(string providerKey)
  {
     if (TempData["CreditCardInfo"] != null)
        {
         var creditCardInfo = TempData["CreditCardInfo"] as CreditCardInfo;
        }
      
      return View();
          
    }