0

我正在使用 Ajax.ActionLink 发出严重的 asp.net mvc ajax 请求。

但是从服务器请求相同的 url 我可能会填充不同的 html 容器(UpdateTargetId)。一切都很好,但我需要知道服务器端我应该返回什么视图。

我看了 fiddler 并没有找到任何关于 UpdateTargetId 值的信息。然后我意识到我可以在 OnBegin javascript 方法中添加一些数据,但我也不知道那里的 UpdateTargetId。

所以现在我正在使用具有不同 http 方法(如 post 和 get)的 hack,但我想找到不那么 hacky 的解决方案。

4

2 回答 2

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();
   }
}

更多细节将不胜感激。

于 2012-07-02T16:01:46.293 回答
0

它不完整,仍然很hacky,但也许是唯一的方法

在 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 更改为自定义 ActionLink 使用不同的标志来触发 ajax 请求(例如 a[data-customajax=true]")来分隔它们。如果有人对这些答案有疑问我很乐意帮助你!

于 2012-07-17T14:37:58.863 回答