Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何更好地处理填充我的主控详细信息类型页面?_Asp.net Mvc_Jqgrid - Fatal编程技术网

Asp.net mvc 如何更好地处理填充我的主控详细信息类型页面?

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

因此,我正在开发我的第一个ASP.NET MVC 3应用程序,并向用户展示了我们制作的各种冰淇淋的jqGrid。选择其中一行后,我当前调用
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);