将动态Id传递给AjaxActionLink ASP.NET MVC 5

时间:2014-08-21 20:57:50

标签: jquery asp.net-mvc html.actionlink

我的观点中有ajax动作链接:

@Ajax.ActionLink("ShowWithFilter", 
                 "ShowCompanyData", 
                 null, 
                 new { StateId = "x", CityId = "y" },
                 new AjaxOptions
                 {
                    HttpMethod = "GET", // HttpMethod to use, GET or POST
                    UpdateTargetId = "PartialView", // ID of the HTML element to update
                    InsertionMode = InsertionMode.Replace, // Replace the existing contents
                    OnBegin = "setParameters",

                 }, new { id = "linkFilter" }
                 )

我在我的页面上有下拉控件。用户可以选择下拉列表,点击上面的ajax链接后,下拉列表中的参数应该发送到控制器操作。

在我的javascrip文件中我有:

$("#linkFilter").click(function (e) { 
    if ($("#ddState").prop("disabled", false)) {   
        $('#linkFilter').attr('href', function () {      
            return this.href.replace('x', $('#ddState').val());
        });
    }
    else if ($("#ddCity").prop("disabled", false)) {
        return this.href.replace('y', $('#ddCity').val());
    }

});
单击

我要将参数添加到ajax操作链接。因此,单击事件已被识别,因此可以,但是"返回this.href.replace(' x',$(' #ddState')。val());&# 34;这行代码说"无法读取undefined"的属性替换。请帮助:/

1 个答案:

答案 0 :(得分:1)

使用jQuery而不是@Ajax.ActionLink来做这件事要好得多。

声明if ($("#ddState").prop("disabled", false))没有任何意义,因为设置属性disabledfalse并始终返回true。由于不清楚您尝试使用此语句做什么,我假设您要将一个或另一个值发送到控制器。

linkFilter元素更改为按钮或其他元素(如果符合您的要求,可以将其设置为类似链接的样式)

$("#linkFilter").click(function (e) {
  var url = '@Url.Action("ShowCompanyData")';
  // set defaults
  var stateID = null;
  var cityID = null;
  // set value based on disabled state of the dropdowns
  if ($("#ddState").is(':disabled')) {
    cityID = $("#ddState").val();
  } else if ($("#ddState").is(':disabled')) {
    stateID = $("#ddState").val();
  }
  $.get(url, {StateId: '', CityId: ''}, function (data) {
    // update view
    $('#PartialView').html(data);
  })
});