Asp.net mvc 如何更好地处理填充我的主控详细信息类型页面?
因此,我正在开发我的第一个ASP.NET MVC 3应用程序,并向用户展示了我们制作的各种冰淇淋的jqGrid。选择其中一行后,我当前调用Asp.net mvc 如何更好地处理填充我的主控详细信息类型页面?,asp.net-mvc,jqgrid,Asp.net Mvc,Jqgrid,因此,我正在开发我的第一个ASP.NET MVC 3应用程序,并向用户展示了我们制作的各种冰淇淋的jqGrid。选择其中一行后,我当前调用Url.Action(“详细信息”,“冰淇淋”),最终创建了一个IceCreamDetails视图模型,其中包含一系列列表(例如,RelatedDesserts,HistoricData),并在my Details中执行类似操作。cshtml: ... <div> @foreach (var related in Model.RelatedDes
Url.Action(“详细信息”,“冰淇淋”)
,最终创建了一个IceCreamDetails视图模型,其中包含一系列列表(例如,RelatedDesserts,HistoricData),并在my Details中执行类似操作。cshtml:
...
<div>
@foreach (var related in Model.RelatedDesserts)
{
@Html.Partial("_RelatedDessert", related)
}
</div>
...
对于上面的foreach循环,当然,它调用relatedserts控制器上的子网格操作。该操作的作用如下:
public PartialViewResult SubGrid(int iceCreamID)
{
using (var db = new IceCreamEntities())
{
return PartialView(iceCreamID);
}
}
其中显示的子栅格视图类似于:
<table id="relatedGrid" cellpadding="0" cellspacing="0">
</table>
<div id="relatedPager" style="text-align: center">
</div>
<div id="relatedImage">
</div>
<script type="text/javascript">
$(document).ready(function() {
$('#relatedGrid').jqGrid({
url: '@Url.Action("GridData", "RelatedDesserts", new {iceCreamID = @Model})',
...
这就用我的数据填充了相关的表格
但感觉这并不是那么简单,子网格所做的只是为GridData操作的结果提供目标,但我不确定如何将这两个操作(子网格和GridData)结合起来,使事情变得更简单。我可能真的走错了方向。我该如何简化和改进它?我的建议是:使用一个模型和一个视图 使用视图所需的所有数据填充模型:在将其发送到视图之前进行所有数据库调用 然后在您的视图(我们称之为“详细信息”)中,您可以进行HTML的所有迭代(表行等…甚至多次迭代-不要担心,这就是视图的目的!),以及JavaScript的设置。除非您看到自己在其他页面上使用这些视图,否则没有必要将它们分割成部分视图 有时候,你需要把事情分成部分或子动作;比如当事情过于复杂时,或者为了可重用性——但这里似乎不是这样
在MVC中,简单让你微笑。:) 你说得对,打这两个电话有点怪。然而,听上去我不认为你能像@cyrotello所说的那样把所有的子数据都放到模型中。这可能是一个非常坚固的模型,它会更复杂而不是更简单 在这个场景中,我只需使用主jqGrid中的链接启动一个JavaScript函数,该函数将通过
$.get()
调用一个控制器操作来重新绑定一个子jqGrid,该操作将提供特定于该子视图的简单模型。此结构不仅允许您将该jqGrid重新绑定到位,还可以填充您可能希望在该子视图中拥有的任何其他支持元素
最终,我认为您感觉到的复杂性与过度使用MVC框架有关。听起来,对页面进行简单的JavaScript操作可能更容易。谢谢你的建议,cyrotello。谢谢你的回复,Josh。我需要想一想你在这里写了些什么。你是说定义我的主网格的页面也定义了我的子网格,然后所有的
onsetrow
调用都是通过JavaScript函数调用我的控制器动作,然后成功回调处理向网格提供数据?是的,这就是我要说的。您的主页布局将同时具有两个网格,我希望子网格包含div
的初始状态将是display:none
。然后,您将有一个绑定到onsetrow
事件的函数,该函数将对控制器操作进行ajax调用,该操作将返回一个ViewModel,您将使用该ViewModel填充子信息(同样通过javascript)。
<table id="relatedGrid" cellpadding="0" cellspacing="0">
</table>
<div id="relatedPager" style="text-align: center">
</div>
<div id="relatedImage">
</div>
<script type="text/javascript">
$(document).ready(function() {
$('#relatedGrid').jqGrid({
url: '@Url.Action("GridData", "RelatedDesserts", new {iceCreamID = @Model})',
...
return Json(result, JsonRequestBehavior.AllowGet);