2012-06-23 29 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,无论如何谢谢 –