使用ASP.NET MVC3,我正在使用Jquery / Ajax将数据从表单发布到控制器中的函数。
我遇到的问题是,当我将这些代码放入索引视图时,它可以正常工作,但是当我将相同的代码放入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>
最佳答案
您的BlogController中可能有操作Index和CreateEntry,它可能是默认控制器?如果是这样,当您调用CreatePost操作时,浏览器中的网址就像
本地主机/博客/ CreatePost
当您调用索引操作时,您在浏览器中的网址就像
本地主机/博客/
(因为您没有明确地编写/ index)。因此,在第一种情况下,javascript代码中的相对ajax URL
网址:“博客/ CreateEntry”
正在发布到
本地主机/博客/博客/ CreateEntry /
而第二个正在呼吁
本地主机/博客/ CreateEntry /
这就是为什么它起作用。因此,您需要借助Url.Content,VirtualPathUtility.ToAbsolute等功能在AJAX调用中使用绝对URL。经验法则:除非绝对必要,否则请勿使用相对URL。