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) {
}
});
}
希望这能解决您的无效问题。