0
因此,我正在处理一个MVC 3项目,该项目从多个(10)表中将旧数据源提取到具有6个部分的主视图。有一张表有每个子视图的数据,因此我们决定将它存储在会话数据中,然后用其他任何需要的数据填充其余的子视图。将会话数据保存到子视图MVC 3
当我们最初尝试这样做时,我们得到了会话数据的空引用异常。我提出了一个解决方案,但它看起来很笨重,我不认为这是最好的做法/引入不必要的状态。
相关代码如下:
这就是我们的主控制器上:
public ActionResult PolicyView(string PolicyID)
{
IPolicyHolder phdata = new PolicyHolderData();
Polmast policy = phdata.GetPolicyFromUV(PolicyID);
ViewBag.FullName = policy.FULLNAME;
ViewBag.PolicyID = PolicyID;
Session["polmast"] = policy;
return View("PolicyView");
}
然后在我们的主要观点,链接到部分子画面之一:
<div id="Billing">
@{ Html.RenderAction("Billing", Session["polmast"]); }
</div>
在子控制器:
public ActionResult Billing(object sessiondata)
{
return PartialView("_Billing", sessiondata);
}
而在子视图:
@{var polmast = (Polmast)Session["polmast"];}
**snip**
<table id="premiumsgrid" class="display" border="1"
cellpadding="0" cellspacing="0" width="50%">
<thead>
<tr>
<th>Annual</th>
<th>Semi-Annual</th>
<th>Quarterly</th>
<th>Monthly</th>
</tr>
</thead>
<tbody>
<tr>
<td>@polmast.PAN</td>
<td>@polmast.PSA</td>
<td>@polmast.PQT</td>
<td>@polmast.PMO</td>
</tr>
</tbody>
</table>
是是是。请将您的视图绑定到模型。这正是MVC应该做的。我也会避免在会话中存储实际的对象。如果你可以将它转换为一个字符串,或者只存储一些int来标识所涉及的实体将更清洁。 – 2012-07-23 20:24:34
我的解决方案是沿着这些路线。我为通过会话数据的子项创建了viewModels,插入了特定于视图的数据,然后传递给它。 – 2012-07-26 16:49:15