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,什么是更好的选择,为什么不使用临时数据?