2012-03-01 74 views
1

我试图建立一种关系,您在网格1中单击采购订单并且网格2将与相关项目一起显示。我一直在研究并尝试了几种不同的方法。我现在的链接是:部分视图重定向而不是填充div

@Ajax.ActionLink("Select", "DisplayPOItems", new { id = Model.poList[0].ID }, new AjaxOptions 
{ 
    UpdateTargetId = "POItems", 
    HttpMethod = "GET", 
    InsertionMode = InsertionMode.Replace, 
}) 

我也尝试过这个动作链接:

$("#POSelect").click(function() { 
    $.get('@Url.Action("DisplayPOItems","PO", new { id = Model.ID })', function() { 
    $('#POItems').load(this.href); 
    return false; 
    }); 
}); 

或使用AJAX赶上click事件,并尝试局部视图填充成一个类似的块div在我的表格上。所有这些方法都有数据填充,但它总是重定向到.../PO/DisplayPOItems/1并仅显示部分视图。这里是我的控制器:

public PartialViewResult DisplayPOItems(int ID) 
{ 
    ItemModel im = new ItemModel(); 
    return PartialView("_GridItem", im.POSearchResult(ID)); 
} 

我已经尝试了Controller上的ActionResult,但它没有帮助。我怎样才能让页面不重定向,并用我的局部视图填充表单中的div?

回答

2

如果你决定使用Ajax.ActionLink确保你已经在你的页面引用的jquery.unobtrusive-ajax.js脚本:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 

如果你决定使用正常的jQuery确保您发送一个Ajax请求,而不是两个像你现在这样做。另外,还要确保你在正确的地方返回false:

$('#POSelect').click(function() { 
    var url = '@Url.Action("DisplayPOItems", "PO", new { id = Model.ID })'; 
    $.get('url', function (result) { 
     $('#POItems').html(result); 
    }); 
    return false; 
}); 

或同类产品:

$('#POSelect').click(function() { 
    var url = '@Url.Action("DisplayPOItems", "PO", new { id = Model.ID })'; 
    $('#POItems').load(url); 
    return false; 
}); 

,或者如果您链接已​​经包含了正确的网址:

$('#POSelect').click(function() { 
    $('#POItems').load(this.href); 
    return false; 
}); 
+0

不显眼的固定它。一直与此战斗。非常感谢你:) – 2012-03-01 21:52:27

1

我有这是一个jQuery插件。

$ -> 
    $.fn.LoadViewInline = (url,target,useInline,callback) -> 
     #debugger 
     $.disableEventPropagation(event); 
     if(!url) 
      url = $(this).data("inline-url") 
     if(!useInline) 
      useInline = $(this).data("inline") 
     if useInline == "True" or useInline == true 
      if(!target) 
       target = $(this).data "inline-target" 
      if(!targetSelectorPrefix) 
       targetSelectorPrefix = "#" 
      $(targetSelectorPrefix + target).load url, callback 
     else 
      window.location.href = url 
     return false 

使用类似:

@Html.ActionLink("Add a Claimant", "Index", "Property", 
    new RouteValues().With("fnolid", Fnolid), 
    HtmlValues.WithClass("header") 
    .Data("inline-url", dataInlineNewClaimantUrl) 
    .Data("inline-target", dataInlineTarget) 
    .Data("inline", dataInline) 
    .With("onclick", "return $(this).LoadViewInline();") 
+0

我想知道我一直在做什么错误的jQuery。感谢您分享这一点。 – 2012-03-02 14:22:45

+0

@MattBodily我发布了Coffeescript源码,下面是编译后的javascript:http://pastebin.com/DKnEkF21 – asawyer 2012-03-02 14:25:32

3

我正在处理同样的问题,几天后,我只是想补充以上的答案,是使用AJAX。

您需要在主视图页面中运行两个您想呈现其他部分视图的Java脚本。只在我的应用程序中使用unobstrusive-ajax dint帮助。

这里是脚本。

<script src="~/Scripts/jquery-1.8.2.min.js"></script> 
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> 

视图页面也需要这个

@using (Ajax.BeginForm("Search", new AjaxOptions() { UpdateTargetId = "results" })) 
    { 

目标ID将在div标签

<div id="results"> 
@renderpartial("results") 
</div> 

这可以帮助获得内容,而无需重新加载整个页面。但我面临着这个问题。我实际上不能重定向到另一个视图(重定向到其他控制器操作并进入其视图),但部分页面加载正常工作。我的意思是控制去那里,但回到相同的看法,而不是移动到其他视图。

希望这会有所帮助。

+0

添加脚本标记帮助,这可以在配置中捆绑。 – Ranvir 2013-09-06 10:32:33