Asp.net mvc 4 在MVC4中使用RedirectToAction发送列表

Asp.net mvc 4 在MVC4中使用RedirectToAction发送列表,asp.net-mvc-4,Asp.net Mvc 4,我有以下代码 public ActionResult Item_Post() { List<Product> products=new List<Product>() ; int? total=0; HttpCookie cookie= Request.Cookies["myvalue"]; if (Request.Cookies["myvalue"] != null) {

我有以下代码

        public ActionResult Item_Post()
    {
        List<Product> products=new List<Product>() ;
        int? total=0;
       HttpCookie cookie= Request.Cookies["myvalue"];
       if (Request.Cookies["myvalue"] != null)
       {
           int count = Request.Cookies["myvalue"].Values.Count;
               var s = Request.Cookies["myvalue"].Value;
               s = HttpUtility.UrlDecode(s ?? string.Empty);
               string[] values = s.Split(',').Select(x => x.Trim()).ToArray();                      
               for (int i = 1; i < values.Length; i++)
               {
                   int id = Convert.ToInt32(values[i]);
                   Product product = db.Products.Single(x => x.Id == id);                       
                   total+=product.Price;
                   products.Add(product);
               }
               ViewBag.total = total;     
           TempData["products"]=products;   
       }
       Session["prod"] = products;
       return View("Buy", products);
       //return RedirectToAction("Buy");
    }
我得到了错误,因为我想张贴表格购买。在RedirectToAction中传递的参数是否合适,或者是否需要其他任何东西。 这就是行动

@model IEnumerable<Shop_Online.com.Models.Product>
@{
ViewBag.Title = "Buy";
}
@using (Html.BeginForm())
{
<div style="width: 860px; margin: 0 auto" class="main">
    <table border="1" style="font-family: Verdana; font-size: 13px">
        <tr style="background-color: #f2f2f2">
            <th colspan="4">ITEM</th>
            <th>DELIEVERY DETAILS</th>
            <th>QTY</th>
            <th>SUB TOTAL</th>
        </tr>
        @foreach (var item in Model)
        {
            <tr>
                <td colspan="4" style="width: 46%">
                    <table style="font-family: Verdana; font-size: 13px">
                        <tr>
                            <td>
                                <img src="@Url.Content(item.Photo)" alt="Image" style="width:36px" />
                            </td>
                            <td>
                                @Html.DisplayFor(x => item.Model_Name)
                            </td>
                        </tr>
                        <tr>
                            <td style="color: #ccc">30 days Replacement</td>
                        </tr>
                    </table>
                </td>
                <td style="width: 39%">Free Delievery Delivered in 2-3 business days.</td>
                <td style="width: 5%">1</td>
                <td style="width: 50%"><b>Rs. @Html.DisplayFor(x => item.Price)</b></td>
            </tr>
        }
    </table>
    <div style="width: 100%; height: 70px; background-color: #f2f2f2">
        <div style="width: 75%; height: 70px; float: left; font-family: Verdana; font-size: 13px">
        </div>
        <div style="width: 25%; height: 70px; float: left; font-family: Verdana; padding-top: 20px; font-size: 13px">
            Estimated Price: <b>Rs.@ViewBag.total</b>
        </div>
    </div>
    <div class="order" style="width: 100%; height: 70px">
        <div class="left-order" style="width: 75%; height: 70px; float: left"></div>
        <div class="left-order" style="width: 25%; float: left; height: 70px">
            <input type="button" value="PLACE ORDER" style="border: 1px solid #ec6723; width: 216px; cursor: pointer; height: 45px; color: #fff; background: -webkit-linear-gradient(top,#f77219 1%,#fec6a7 3%,#f77219 7%,#f75b16 100%)" onclick="return confirm('Successfull placed order')" />
        </div>

    </div>
</div>
}

您的Buy ActionResult是否接受
列表作为参数,例如:

public ActionResult Buy(List<Product> ids)
{
    ...
}
public ActionResult购买(列表ID)
{
...
}

如果没有此选项,它将不知道如何处理产品列表

您的购买操作结果是否接受
列表
作为参数,例如:

public ActionResult Buy(List<Product> ids)
{
    ...
}
public ActionResult购买(列表ID)
{
...
}

如果没有此功能,它将不知道如何处理产品列表

您可以通过RedicToAction将产品数组作为id传递

它接受RouteParameter或您在url的查询字符串中传递的值

如果您想使用RedirectToAction,那么我建议您应该使用TempData

public ActionResult Item_Post()
    {
        List<Product> products=new List<Product>() ;
        int? total=0;
       HttpCookie cookie= Request.Cookies["myvalue"];
       if (Request.Cookies["myvalue"] != null)
       {        
        some logic here
       }                   
       TempData["Products"] = products;
       return RedirectToAction("Buy");
    }
public ActionResult项_Post()
{
列表产品=新列表();
int?总计=0;
HttpCookie cookie=Request.Cookies[“myvalue”];
if(Request.Cookies[“myvalue”!=null)
{        
这里有些逻辑
}                   
TempData[“产品”]=产品;
返回操作(“购买”);
}
在你的购买行动中

 public ActionResult Buy()
{
   // Get value from TempData
   var products=  (List<Product>)TempData["Products"];
}
公共行动结果购买()
{
//从TempData获取值
var产品=(列表)临时数据[“产品”];
}

您可以通过RedicToAction将产品数组作为id传递

它接受RouteParameter或您在url的查询字符串中传递的值

如果您想使用RedirectToAction,那么我建议您应该使用TempData

public ActionResult Item_Post()
    {
        List<Product> products=new List<Product>() ;
        int? total=0;
       HttpCookie cookie= Request.Cookies["myvalue"];
       if (Request.Cookies["myvalue"] != null)
       {        
        some logic here
       }                   
       TempData["Products"] = products;
       return RedirectToAction("Buy");
    }
public ActionResult项_Post()
{
列表产品=新列表();
int?总计=0;
HttpCookie cookie=Request.Cookies[“myvalue”];
if(Request.Cookies[“myvalue”!=null)
{        
这里有些逻辑
}                   
TempData[“产品”]=产品;
返回操作(“购买”);
}
在你的购买行动中

 public ActionResult Buy()
{
   // Get value from TempData
   var products=  (List<Product>)TempData["Products"];
}
公共行动结果购买()
{
//从TempData获取值
var产品=(列表)临时数据[“产品”];
}

您无法在操作方法中获取传递给
重定向到操作的
列表
或任何
模型
对象。因为
RedirectToAction
导致
http302(Redirect)
请求,这使得浏览器调用GET请求操作

您应该使用
TempData
Item\u Post
操作方法中保存数据

public ActionResult Item_Post()
    {
        List<Product> products=new List<Product>() ;
        int? total=0;
       HttpCookie cookie= Request.Cookies["myvalue"];
       if (Request.Cookies["myvalue"] != null)
       {        
        some logic here
       }  
       //save it to TempData for later usage
       TempData["products"] = products;

       //return View("Buy", products);
       //return RedirectToAction("Buy", new {id=products});

       return RedirectToAction("Buy");
    }
希望这有帮助


更新

使用以下代码执行
Buy
操作

[HttpGet]
        public ActionResult Buy()
        {
            var products = TempData["products"] as List<Product>;
            return View(products);
        }
现在,这将显示所有项目的列表

或者,您也可以尝试以下代码来替代上述foreach,而不是将
TempData
分配给model类的对象

@if (TempData["products"] != null)
{
    foreach (var item in TempData["products"] as List<Product>)
    {
        <div>
            Item Id: @item.Id
        </div>
        <div>
            Item name: @item.Name
        </div>
    }
}
@if(TempData[“产品”!=null)
{
foreach(TempData[“产品”]中的var项作为列表)
{
项目Id:@Item.Id
项目名称:@Item.name
}
}

您无法在操作方法中获取传递给
重定向到操作的
列表
或任何
模型
对象。因为
RedirectToAction
导致
http302(Redirect)
请求,这使得浏览器调用GET请求操作

您应该使用
TempData
Item\u Post
操作方法中保存数据

public ActionResult Item_Post()
    {
        List<Product> products=new List<Product>() ;
        int? total=0;
       HttpCookie cookie= Request.Cookies["myvalue"];
       if (Request.Cookies["myvalue"] != null)
       {        
        some logic here
       }  
       //save it to TempData for later usage
       TempData["products"] = products;

       //return View("Buy", products);
       //return RedirectToAction("Buy", new {id=products});

       return RedirectToAction("Buy");
    }
希望这有帮助


更新

使用以下代码执行
Buy
操作

[HttpGet]
        public ActionResult Buy()
        {
            var products = TempData["products"] as List<Product>;
            return View(products);
        }
现在,这将显示所有项目的列表

或者,您也可以尝试以下代码来替代上述foreach,而不是将
TempData
分配给model类的对象

@if (TempData["products"] != null)
{
    foreach (var item in TempData["products"] as List<Product>)
    {
        <div>
            Item Id: @item.Id
        </div>
        <div>
            Item name: @item.Name
        </div>
    }
}
@if(TempData[“产品”!=null)
{
foreach(TempData[“产品”]中的var项作为列表)
{
项目Id:@Item.Id
项目名称:@Item.name
}
}


如果有任何问题,请发表评论unclear@ssilas777这不起作用,因为我正在传递一个价值列表扫描您发布您的操作
购买
@karthik plz如果有任何问题,请检查codeplz评论unclear@ssilas777这不起作用,因为我正在传递一份价值清单扫描你发布你的行动
购买
@karthik plz检查代码是否完全相同正如你刚才提到的。当我使用返回视图(“购买”,产品)时,它工作得很好。但问题是url保持不变。我希望url被重定向到操作将抓取GET方法,你需要发布到/Home/Buy吗?我想移动到/Home/Buy?与你上面提到的完全相同。当我使用返回视图(“购买”,产品)时,它工作得很好。但问题是url保持不变。我想将url设置为RedirectToAction将获取GET方法,您需要发布到/Home/Buy吗?我想移动到/Home/Buy吗?@用户您尝试过吗?您的列表包含多少元素?临时数据不是最佳选择。@KolobCanyon,什么是更好的选择,为什么不包含临时数据?@User您尝试过吗?您的列表包含多少元素?临时数据不是最佳选择。@KolobCanyon,什么是更好的选择,为什么不使用临时数据?