ASP.NET MVC3 Jquery/Ajax问题
在ASP.NETMVC3中,我使用Jquery/Ajax将数据从表单发布到控制器中的函数。 我遇到的问题是,当我把这段代码放到我的索引视图中时,它工作得很好,但是当我把同样的代码放到我的CreatePost视图中时,我就不工作了。我可以根据警报和在控制器中的函数上设置断点来判断它是否工作 我的控制器叫做BlogController,这是函数的样子:(现在是一个伪函数) 我的视图中的代码如下所示: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 (
<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。经验法则:除非绝对必要,否则不要使用相对URLCreatePost看起来像什么?您在控制台中有任何错误吗?响应是什么?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>