ASP.NET MVC3 Jquery/Ajax问题

ASP.NET MVC3 Jquery/Ajax问题,jquery,asp.net,ajax,asp.net-mvc-3,Jquery,Asp.net,Ajax,Asp.net Mvc 3,在ASP.NETMVC3中,我使用Jquery/Ajax将数据从表单发布到控制器中的函数。 我遇到的问题是,当我把这段代码放到我的索引视图中时,它工作得很好,但是当我把同样的代码放到我的CreatePost视图中时,我就不工作了。我可以根据警报和在控制器中的函数上设置断点来判断它是否工作 我的控制器叫做BlogController,这是函数的样子:(现在是一个伪函数) 我的视图中的代码如下所示: <script type="text/javascript"> $(function (

在ASP.NETMVC3中,我使用Jquery/Ajax将数据从表单发布到控制器中的函数。 我遇到的问题是,当我把这段代码放到我的索引视图中时,它工作得很好,但是当我把同样的代码放到我的CreatePost视图中时,我就不工作了。我可以根据警报和在控制器中的函数上设置断点来判断它是否工作

我的控制器叫做BlogController,这是函数的样子:(现在是一个伪函数)

我的视图中的代码如下所示:

<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();
}

$(函数(){
$(“.error”).hide();
});
函数submitterypostform(){
var blogEntry={
“title”:$(“#EntryTitle”).val(),
'body':$('EntryBody').val()
};
$.ajax({
类型:“POST”,
url:“blog/CreateEntry”,
数据:blogEntry,
成功:函数(){
警惕(“它起作用”);
}
});
返回false;
}
函数ValidateCreateEntry(){
$(“.error”).hide();
var title=$(“#EntryTitle”).val();
如果(标题==“”){
$(“#title_error”).show();
$(“#EntryTitle”).focus();
返回false;
}
var body=$(“#EntryBody”).val();
如果(正文==“”){
$(“#body_error”).show();
$(“#BodyTitle”).focus();
返回false;
}
返回submitterypostform();
}


标题
此字段必填。

内容 此字段必填。

您的BlogController右侧可能有actions Index和CreateEntry,它可能是默认的控制器?如果是这样,当您调用CreatePost操作时,您在浏览器中的url如下

localhost/blog/CreatePost

当您调用索引操作时,浏览器中的url如下

本地主机/博客/

(因为您没有显式地写入/索引)。因此,在第一种情况下,javascript代码中的相对ajax URL

url:“博客/CreateEntry”

正在发送到

localhost/blog/blog/CreateEntry/

而第二个正在呼叫

localhost/blog/CreateEntry/


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

CreatePost看起来像什么?您在控制台中有任何错误吗?响应是什么?Index和Create Post是相同的,因为它们都包含javascript和相同的表单。Daniel可能是您的问题的根源:CreateEntry!=CreatePost。你的路线是否正确?尽快?我发现了问题。Rory检查控制台是对的。我已经有一段时间没有使用firebug了,只是使用了脚本选项卡,但没有成功。问题是javascript应该在CreatePost视图上调用“CreateEntry”,而不是“blog/CreateEntry”。结果是blog/blog/CreateEntry,这是错误的。
<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>