我有以下代码
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");
}
现在当我只使用返回视图(&#34;购买&#34;,产品)时,我收到的输出和Url保持一致,因为我想要更改网址,当我使用时
return RedirectToAction("Buy", products);
我收到错误,因为我想将表单发布到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>
}
现在如何在视图中替换以下代码如果我使用TempData
@foreach(var item in Model)
{
@Html.DisplayFor(model=>model.Name
/some more code/
}
答案 0 :(得分:3)
您无法在操作方法中将list
或任何model
个对象传递给RedirectToAction
。由于RedirectToAction
会导致HTTP 302 (Redirect)
请求,这会让浏览器调用 GET 请求。
您应该使用TempData
来保存Item_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
操作中使用TempData
来获取您的数据。
[HttpGet]
public ActionResult Buy()
{
var products = TempData["products"];
//.. do anything
}
希望这有帮助。
<强>更新强>
使用以下代码进行Buy
操作。
[HttpGet]
public ActionResult Buy()
{
var products = TempData["products"] as List<Product>;
return View(products);
}
现在在视图中,使用foreach
覆盖产品中的元素列表
@model IEnumerable<Shop_Online.com.Models.Product>
@foreach (var item in Model)
{
<div>
Item Id: @item.Id
</div>
<div>
Item name: @item.Name
</div>
}
现在这应显示所有项目的列表。
或者不是将TempData
分配给模型类的对象,您也可以尝试使用以下代码替换上述foreach。
@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>
}
}
答案 1 :(得分:1)
您可以从RedirctToAction传递产品数组作为ID。
它接受RouteParamter或只是你在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 Buy()
{
// Get value from TempData
var products= (List<Product>)TempData["Products"];
}
答案 2 :(得分:0)
您的Buy ActionResult是否接受List<Product>
作为参数,例如:
public ActionResult Buy(List<Product> ids)
{
...
}
如果没有它,它将不知道如何处理产品列表