如何使用MVC 3.0 RAZOR制作AJAX获取请求?

时间:2012-02-13 13:48:30

标签: jquery ajax asp.net-mvc

我有下面的代码,当下拉列表中的选项被更改时运行:

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”才能使其在服务器上运行。

那么如何在运行时检索应用程序路径?

4 个答案:

答案 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并从那里锻炼网址。