2012-03-01 22 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