在ASP.NET MVC 3应用程序中,我使用Ajax.BeginForm将写入的文本发布到控制器。
@using (Ajax.BeginForm("Post", "Forum", new {threadId = Model.Thread.Id }, new AjaxOptions { OnSuccess = "PostReply" }))
{
<div id="reply-area">
<h3 style="border-bottom:1px solid black">POST REPLY</h3>
<span id="post-error" class="error-message"></span>
<textarea rows="1" cols="1" id="post-textarea" name="Content"> </textarea>
<input type="submit" class="button" value="Submit"/>
</div>
}
在控制器中我有
[HttpPost]
public ActionResult Post(int threadId,PostModel model)
{
bool Success = false;
if (ModelState.IsValid)
{
Success=Unit.ForumFacade.CreatePost(Unit.ForumFacade.GetThreadByID(threadId), model.Content, CurrentUserId);
if (Success == true) return View("PostSuccess");
}
return Json("fsdfds");
}
在javascript中我有这个
function PostReply(isRequestSuccessed) {
alert("asdasd");
if (isRequestSuccessed==false) {
$("#post-error").html("Please Try Again");
}
else
{
$("#post-error").html("");
}
}
问题是Javascript的功能没有触发并且没有警报,我的浏览器(Firefox)返回弹出窗口以下载application / json文件。 这有什么不对?
答案 0 :(得分:20)
确保您已将以下脚本包含在您的页面中:
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
并且您已在web.config中启用了不显眼的javascript:
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
这使Ajax.*
辅助工具Ajax.BeginForm
起作用。
答案 1 :(得分:3)
感谢&#34; Darin Dimitrov&#34;和his answer指出了很多关于这一点。但只是添加它,我知道这可能很简单,但这让我,
我的错误是我想的
jquery.validate.unobtrusive.js
和
jquery.unobtrusive-ajax.js
在他们不是的时候也是如此。确保使用&#34; jquery.unobtrusive-ajax.js&#34;发现于Nuget。
答案 2 :(得分:0)
当你给表单一个Id然后将提交事件附加到一个单独的javascript文件(使用jQuery)并处理那里的帖子时,这是一个更好的解决方案
HTML:
@using (Ajax.BeginForm("Post", "Forum", new {threadId = Model.Thread.Id }, new {id = "formid" }))
{
...
使用Javascript:
$("#formid").submit(function (e) {
e.preventDefault();
if ($(this).valid()) {
$.ajax({
type: "POST",
url: $(this).attr('action'),
data: $(this).serialize(),
success: function (result) {
//do your success logic
}
});
}
});
答案 3 :(得分:0)