jquery - ASP.NET MVC3 Jquery/Ajax 问题

标签 jquery asp.net ajax asp.net-mvc-3

通过 ASP.NET MVC3,我使用 Jquery/Ajax 将数据从表单发布到 Controller 中的函数。 我遇到的问题是,当我将此代码放入我的 Index View 中时,它工作正常,但是当我将相同的代码放入我的 CreatePost View 中时,我无法工作。我可以根据警报并通过在 Controller 中的功能上设置断点来判断其是否工作。

我的 Controller 称为 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>

最佳答案

您的 BlogController 中可能有 Index 和 CreateEntry 操作,并且它可能是默认 Controller ?如果是这样,当您调用 CreatePost 操作时,您在浏览器中的网址将类似于

localhost/blog/CreatePost

当你调用 Index 操作时,你在浏览器中的网址就像

localhost/blog/

(因为您没有明确编写/index )。因此,在第一种情况下,javascript 代码中的相对 ajax URL

url: "blog/CreateEntry"

正在发布到

localhost/blog/blog/CreateEntry/

当第二个正在调用

localhost/blog/CreateEntry/

这就是它起作用的原因。因此,您需要在 Url.Content、VirtualPathUtility.ToAbsolute 等函数的帮助下,在 AJAX 调用中使用绝对 URL。经验法则:除非绝对必要,否则切勿使用相对 URL

关于jquery - ASP.NET MVC3 Jquery/Ajax 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5819927/

相关文章:

php - 让一个下拉选择框从 Mysql 数据库填充另一个下拉选择框

Javascript 对象排序仅有时有效

jquery - Ajax 无法在 IE11 中工作,错误代码 0x2f78

javascript - 如何确定使用 $.post() 或 $.get() 时的错误

c# - 为什么我的 GridView CommandField 中有一个有趣的 "block"?

c# - 如何从 gridview 给 gridview 第一列左边距?

javascript - php ajax 可以工作,也可以不工作

javascript - 使用按钮更改文本输入

javascript - 即使在更改过渡时间后,Bootstrap 3 中的折叠也会延迟点击

c# - ASP.net C#。我如何解析来自博客的原子提要