Как сделать запрос на получение AJAX с помощью MVC 3.0 RAZOR? - PullRequest
4 голосов
/ 13 февраля 2012

У меня есть приведенный ниже код, который запускается при изменении параметра в раскрывающемся списке:

function ddlSqlList_onchange(listItemId) {
    $.get('/SqlReportList/SqlQuery',         
    { 
        "listItemId": listItemId 
    },
    function (data) { 
        alert('succeeded'); 
        $('#tbSqlQuery').text(data); 
    });}

"SqlReportList" - это мой контроллер, SqlQuery - это действие, а listItemId - входной параметр для этого действия.

     public string SqlQuery(string listItemId)
            {
// code here
}

Локально работает, но при развертывании на нашем dev-сервере не работает.

Я понял, что URL должен измениться на "/ ApplicationName / SqlReportList / SqlQuery", чтобы он работал на сервере.

Итак, как получить путь к приложению во время выполнения?

Ответы [ 4 ]

4 голосов
/ 13 февраля 2012

Если вы не хотите много писать встроенный 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); 
    }
);}
3 голосов
/ 13 февраля 2012

Какую версию MVC вы используете ..

В MVC 3.0 с Razor вы можете использовать:

@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); 
    });}
0 голосов
/ 13 февраля 2012

Вы можете использовать window.location.hostname и тренировать URL оттуда.

0 голосов
/ 13 февраля 2012

если вы используете ASPX, вы используете следующее:

$.ajax({
   type: 'POST',
   url: '<%=Url.Action("ActionName","ControllerName")%>',
   data: { dataNameInAction: dataValue },
   success: function () {
         callBack Success Function
   },
   error: function () {
         callbackFaileFunction
   }
});

и на стороне сервера (контроллер)

вы возвращаете JsonData обратно, если имеете дело с Json,

, например

public ActionScript Action(DataType dataNameInAction)
{
..
..

return Json(new { ReturnedData = value, ReturnedData2 = value2 });
}

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...