2012-06-23 57 views
0

我使用Ajax.ActionLink嚴肅的asp.net mvc ajax請求。MVC4 Ajax.ActionLink發送UpdateTargetId到服務器

但是,從服務器請求相同的URL我可能會填寫不同的HTML容器(UpdateTargetId)。 一切都很好,但我需要知道serverside我應該返回什麼視圖。

我看着小提琴手,沒有找到任何有關UpdateTargetId值的信息。 然後我意識到我可以在OnBegin javascript方法中添加一些數據,但我也不知道UpdateTargetId。

所以,現在我使用不同的http方法(如發佈和獲得)的黑客攻擊,但我想找到少hacky的解決方案。

+0

你的問題有點令人困惑,但根據我的理解,你可以創建一個局部視圖並使用jquery使用ajax/json調用來更新該視圖 – Yasser

+1

你可以發佈控制器動作和視圖代碼以及問題 – swapneel

+0

I'稍後更新答案,但沒有什麼可以在代碼中顯示它幾乎是基本的asp.net mvc來調用Ajax.ActionLink(... OnBegin =「SomeJsFunc」,UpdateTargetId =「someId」...),並獲取UpdateTargetId在控制器或JavaScript函數SomeJsFunc之前請求會觸發到服務器上。 –

回答

0

這不是完整的,仍然哈克但也許唯一的辦法

在jquery.unobtrusive-ajax.js只是改變

$("a[data-ajax=true]").live("click", function (evt) { 
     evt.preventDefault(); 
     asyncRequest(this, { 
      url: this.href, 
      type: "GET", 
      data: [] 
     }); 
    }); 

$("a[data-ajax=true]").live("click", function (evt) { 
     evt.preventDefault(); 
     asyncRequest(this, { 
      url: this.href, 
      type: "GET", 
      data: [{ name: "targerId", value: this.getAttribute("data-ajax-update") }] 
     }); 
    }); 

或asyncRequest再添推方法:

... 
options.data.push({ name: "X-Requested-With", value: "XMLHttpRequest" }); 
options.data.push({ name: "targerId", value: element.getAttribute("data-ajax-update") }); 
... 

我不想更改不顯眼的代碼,並將Ajax.ActionLink更改爲使用不同標誌來觸發ajax請求(例如[data-customajax = true])的自定義ActionLink以將它們分開。 如果有人對這些問題有任何疑問,我很樂意幫助你!

2

如果我正確理解這個問題,你可能想要做的事就像你視圖:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
<div id="testid" class='blah'></div> 
@Ajax.ActionLink("Show Test Options", "ShowTestOptions", "Test", new { theVariableIWant = "Test" }, new AjaxOptions { UpdateTargetId = "testid", HttpMethod = "GET" }) 

然後在你的控制器有這樣的:

public class TestController : Controller 
{ 
    [HttpGet] 
    public PartialViewResult ShowTestOptions(string theVariableIWant) 
    { 
     ///Perform whatever operations you need to here. 
     return PartialView(); 
    } 
} 

更多細節將不勝感激。

+0

是的,這是正確的,但我不能在這裏看到解決方案...我需要testid serverside。 –

+1

我更新了將變量傳遞到服務器端控制器的一般方法。如果你有一個你需要傳遞的整數,相應地更新它(即VariableIwant =你想要的任何值)。如果您有多個值,那麼您應該可以將更多值添加到字典中。讓我知道這是否能解決您的問題。 編輯:您可能也需要發佈它,我不確定。 – Saedeas

+0

哦,對不起,不好意思。我忘了再寫一次重要的一點,它是單頁面,我需要有清晰的鏈接(沒有內部參數作爲VariableIWant),直到我使用歷史API更新網址。當然,我可以在處理url時削減查詢字符串參數VariableIWant,但我希望在鏈接上有乾淨的href,無論如何謝謝 –