在MVC3中调用JavaScript时,Controler Action方法调用将参数作为null



i使用mvc3。我有

function userLocation_change()
 {
    var text = $("#userLocation").val();
    alert(text);
    var url = '@Url.Action("GetAllLocations", "Home")';
    var data = text;
    $.post(url, data, function (result) {

        });
}

`

这是我的控制器动作:

public JsonResult GetAllLocations(string userlocation)
    {
        ///...some code...
        return Json(..Something.., JsonRequestBehavior.AllowGet);
    }

问题是,每当Controler函数称为"userlocation"参数确实具有空值时。我希望data值将传递给控制器操作。有人可以告诉我为什么会发生这种情况吗?任何更新都将不胜感激。谢谢。

您需要专门通过此url.action的过载方法将参数传递给@Url.Action。您可以使用RoutevalueDictionary内联构造函数进行实例化。


编辑:现在要意识到您需要在运行时填充该链接,但是Url.Action方法在渲染时间生成链接。我建议将其添加到查询字符串中,然后在您的控制器方法中从查询字符串中读取它。我怀疑有一种更优雅的方法..但是我知道这有效。

类似: var url = '@Url.Action("GetAllLocations", "Home")?userlocation=' + $("#userLocation").val();

修改您的jQuery post函数调用为:

$.post(  
    url,  
    { userlocation: text },  
    function(result){
       ....
}); 

这是因为,您必须使用JavaScript文字将数据发送到控制器的操作方法。您可以在此处使用JavaScript查看各种方式来调用Controller的操作的完整列表:http://www.asp.net/ajaxlibrary/jquery_posting_to.ashx

您的操作具有一个名为 userlocation的字符串输入参数,因此在将数据发送到操作时,您应该指定此内容,就像以下代码中所做的那样。

在这里我正在使用data: { userlocation: text},

function userLocation_change()
 {
    var text = $("#userLocation").val();
    var url = '@Url.Action("GetAllLocations", "Home")';
    $.ajax({
    url: url,
    type: 'POST',
    data: { userlocation: text},     
    success: function (result) {
    }
    });
}

希望这能解决您的无效问题。

最新更新