0

,大家好,

我正在尝试使用 json。如果我返回部分视图,我无法将 foreach 用于我的客户会话。我的客户会话有客户。我无法列出他们。我想念哪里?

CONTROLLER:

public ActionResult ShowResult(MyModel model)
{
Session["CustomerList"] = context.Customer.Where(s => s.CustomerSituation== true).ToList(); // Customers List To Session
var stringView = RenderRazorViewToString("_ShowResultPartial", model);
return Json(stringView, JsonRequestBehavior.AllowGet);
}

.

My _ShowResultPartial View:
@foreach (var item in (List<Q502351.Models.Customer>)Session["CustomerList"])
{
Ajax.ActionLink(item.CustomerName, "ShowResult", new { CustomerId = item.CustomerId}, new AjaxOptions { HttpMethod = "POST" });
}
4

1 回答 1

1

从您发布的内容来看,尚不清楚为什么要将客户列表存储在会话中;视图的数据通常应该存储在视图模型上。即使您有一个令人信服的理由使用会话,最好还是在控制器中检索会话变量并将它们存储在视图模型中。然后您应该能够从视图中遍历模型上的列表。在这种情况下,看起来根本不需要会话(除非您打算稍后重用存储的数据并且由于某种原因无法通过模型传递它)。

此外,除非有充分的理由返回 json,否则您的 ShowResult 控制器方法应该只返回一个 PartialView。

像这样的东西应该工作......

控制器:

public ActionResult ShowResult(MyModel model)
{
    model.Customers = context.Customer.Where(s => s.CustomerSituation == true).ToList();
    return PartialView("_ShowResultPartial"), model);
}

部分观点:

@model MyModel

@foreach (var item in Model.Customers)
{
    Ajax.ActionLink(item.CustomerName, "ShowResult", new { CustomerId = item.CustomerId}, new AjaxOptions { HttpMethod = "POST" });
}
于 2013-09-18T21:56:57.427 回答