我有下面的代码,当下拉列表中的选项被更改时运行:
function ddlSqlList_onchange(listItemId) {
$.get('/SqlReportList/SqlQuery',
{
"listItemId": listItemId
},
function (data) {
alert('succeeded');
$('#tbSqlQuery').text(data);
});}
“SqlReportList”是我的Controller,SqlQuery是一个Action,listItemId是该动作的输入参数。
public string SqlQuery(string listItemId)
{
// code here
}
它在本地工作正常但是当部署到我们的开发服务器时,它不起作用。
我意识到URL必须更改为“/ ApplicationName / SqlReportList / SqlQuery”才能使其在服务器上运行。
那么如何在运行时检索应用程序路径?
答案 0 :(得分:4)
如果您不想编写那么多内联JavaScript,那么您可以将url存储到隐藏字段中。
<input type="hidden" id="myGetUrl" value="@(Url.Action("ActionName", "Controller"))" />
在JavaScript中
function ddlSqlList_onchange(listItemId) {
var url = $('#myGetUrl').val();
$.get(url,
{
"listItemId": listItemId
},
function (data) {
alert('succeeded');
$('#tbSqlQuery').text(data);
}
);}
答案 1 :(得分:3)
您使用的是哪个版本的MVC ..
在使用Razor的MVC 3.0中,您可以使用:
@Url.Action("SqlQuery","SqlReportList")
或者您可以使用:
@Server.MapPath("~")
获取应用的基地址,然后自行构建。如果有帮助的话,Server.MapPath也可以在控制器中工作。(似乎Url类在控制器中也可用)
(来自记忆)
编辑评论:
如果您在.cshtml文件中,它将如下所示:
function ddlSqlList_onchange(listItemId) {
$.get('@Url.Action("SqlQuery","SqlReportList")',
{
"listItemId": listItemId
},
function (data) {
alert('succeeded');
$('#tbSqlQuery').text(data);
});}
答案 2 :(得分:0)
如果您使用的是ASPX,请使用以下命令:
$.ajax({
type: 'POST',
url: '<%=Url.Action("ActionName","ControllerName")%>',
data: { dataNameInAction: dataValue },
success: function () {
callBack Success Function
},
error: function () {
callbackFaileFunction
}
});
并在serverSide(Controller)上
如果您正在处理Json,则返回JsonData,
e.g。
public ActionScript Action(DataType dataNameInAction)
{
..
..
return Json(new { ReturnedData = value, ReturnedData2 = value2 });
}
我希望这有助于
答案 3 :(得分:0)
您可以使用window.location.hostname
并从那里锻炼网址。