ASP.NET MVC3 Jquery / Ajax Проблема - PullRequest
2 голосов
/ 28 апреля 2011

В ASP.NET MVC3 я использую Jquery / Ajax для отправки данных из формы в функцию в моем контроллере. Проблема, с которой я столкнулся, заключается в том, что когда я помещаю этот код в мое представление Index, он работает нормально, но когда я помещаю тот же код в мое представление CreatePost, я не работаю. Я могу сказать, работает ли он или нет, основываясь на предупреждении и установив точку останова на функцию в контроллере.

Мой контроллер называется BlogController, и вот как выглядит эта функция: (пока это пустая функция)

    [AcceptVerbs(HttpVerbs.Post)]
    public JsonResult CreateEntry(string title, string body)
    {
        return Json(false);
    }

Код на мой взгляд выглядит так:

<script type="text/javascript">
$(function () {
    $(".error").hide();

});

function SubmitEntryPostForm() {
    var blogEntry = {
        'title': $('#EntryTitle').val(),
        'body': $('#EntryBody').val()
    };
    $.ajax({
        type: "POST",
        url: "blog/CreateEntry",
        data: blogEntry,
        success: function () {
            alert("it worked");
        }

    });
    return false;
}

function ValidateCreateEntry() {
    $(".error").hide();
    var title = $("#EntryTitle").val();
    if (title == "") {
        $("#title_error").show();
        $("#EntryTitle").focus();
        return false;
    }
    var body = $("#EntryBody").val();
    if (body == "") {
        $("#body_error").show();
        $("#BodyTitle").focus();
        return false;
    }
    return SubmitEntryPostForm();
}

<div id="CreateEntry">
<form action="">
    <fieldset>
        <label for="title" id="title_label">Title</label>
        <input type="text" name="title" id="EntryTitle" size="30" />
        <label class="error" for="title" id="title_error">This field is required.</label>
        <br />
        <label for="body" id="body_label">Content</label>
        <input type="text" name="body" id="EntryBody" size="30" />
        <label class="error" for="boby" id="body_error">This field is required.</label>
        <br />
        <input type="submit" name="submit" class="button" id="CreateEntryButton" value="Send" onclick="return ValidateCreateEntry();" />
    </fieldset>
</form>

1 Ответ

3 голосов
/ 28 апреля 2011

Возможно, у вас есть действия Index и CreateEntry в вашем праве BlogController, и, вероятно, это контроллер по умолчанию? Если это так, когда вы вызываете действие CreatePost, ваш URL в браузере выглядит как

локальный / блог / CreatePost

и когда вы вызываете действие Index, ваш URL в браузере выглядит как

локальный / блог /

(поскольку вы не пишете / не индексируете явно). Итак, в первом случае относительный URL-адрес ajax в коде JavaScript

url: "blog / CreateEntry"

публикует на

локальный / блог / блог / CreateEntry /

пока второй звонит на

локальный / блог / CreateEntry /

и вот почему это работает. Поэтому вам необходимо использовать абсолютные URL-адреса в вызовах AJAX с помощью некоторых функций, таких как Url.Content, VirtualPathUtility.ToAbsolute и т. Д. Основное правило: никогда не используйте относительные URL-адреса, если в этом нет абсолютно необходимой .

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