2010-06-29 24 views
0

我想创建一个叫ImageViewer的局部视图。它将被称为提供图像ID列表(简化)。然后我想返回这个局部视图,类似提供的数据可通过jQuery在.Net MVC 2

imagecontroller.ImageViewer(new int[] { 5, 6, 7 }); 

产生以下:

<div> 
    <img grayuparrow /> 
    <img source="image/getimage5" /> 
    <img blackdownarrow /> 
</div> 

点击DownArrow中文然后使用jQuery的访问(在本实施例6)下一个图像。我应该没有问题使用jQuery来获取图像,但我如何从PartialView存储信息到DOM?我想存储提供给操作方法的列表和当前索引。

或者我应该考虑完全不同的方式来实现这个滚动图像查看器?

UPDATE:

我猜我问的是,有没有办法在一个MVC视图标注在额外数据的DOM元素?

现在我有了这个代码:

<script type="text/javascript"> 
    $(document).ready(function() { 
    var images = []; 
    <% foreach(ImageGroup group in Model) 
    { %> 
    images.push(imageGroup(<%= group.Description %>, [<%= Html.FormatArgs(group.ImageIDs) %> ])); 
<% } %> 
    setImageGroups(images, $(".imageviewer")); 
    } 
</script> 

imageGroup是一个JavaScript函数返回一个imageGroup对象。

哪个应该工作,但没有任何干净。有什么方法可以轻松地将.Net对象转换为javascript对象,或者用额外的数据注释一个DOM元素?

function setImageGroups(imagegroups, element) { 
$(element).data("imageGroups", imagegroups); 
$(element).data("imageIndex", 0); 
$(element).children(".upnav").click(previousImageGroup); 
$(element).children(".downnav").click(nextImageGroup); 
renderImageGroup(element); 
} 

回答

0

为什么不考虑让你的局部视图呈现所有图像的代码,但只有一个可见?或者,如果加载时间是一个问题,您可以简单地将url存储在一个javascript数组中并旋转它们。

<div> 
    <img src="<%= Url.Content("~/content/images/grayuparrow.png") %>" /> 
    <% var display = true; 
     foreach (int id in Model.ImageIDs) 
     { %> 
      <img src="<%= Url.Action("get", "image", new { id = id }) %>" 
      <%= !display ? "style='display: none;' : "" %> 
      /> 
    <%  display = false; 
     } %> 
    <img src="<%= Url.Content("~/content/images/blackdownarror.png") %>" /> 
</div> 

<script type="text/javascript"> 
     var images = []; 
     var currentImage = 0; 
     <% foreach (int id in Model.ImageIDs) 
     { %> 
      images.push('<%= Url.Action("get", "image", new { id = id }) %>'); 
     <% } %> 
</script> 
<div> 
    <img src="<%= Url.Content("~/content/images/grayuparrow.png") %>" /> 
    <img src="<%= Url.Action("get", "image", new { id = Model.ImageIDs.First() }) %>" /> 
    <img src="<%= Url.Content("~/content/images/blackdownarror.png") %>" /> 
</div> 
+0

看起来这会增加一点复杂性的东西,通常会是一个简单的Ajax调用来检索20行左右的标记。虽然这是一个聪明的解决方案。 – R0MANARMY 2010-06-29 14:52:38

+0

@ROMANARMY - 我知道这是通过部分返回的标记;图像ID被提供给部分并作为图像查看器呈现。当然,我忽略了使视图实际上在图像中旋转的代码。 – tvanfosson 2010-06-29 15:01:01

+0

嗯,顺便说一句,我的名字有一个0(零),而不是一个O(主要是为了将来的参考,所以我实际上看到的消息指向我)。 – R0MANARMY 2010-06-29 15:27:58