【发布时间】:2013-12-17 18:10:27
【问题描述】:
我显然错过了一些东西,但我一生都看不到它是什么,如果有人能指出我的错误,我将不胜感激。
我有一个简单的详细信息页面,其中包含一个用于将 cmets 添加到所选详细信息的表单。
我有一个视图,其中包含以下格式:
@using (Html.BeginForm("Details", "Home", FormMethod.Post, new { id ="commentForm" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.NewComment.Name);
@Html.TextBoxFor(model => model.NewComment.Name, new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(model => model.NewComment.Body);
@Html.TextAreaFor(model => model.NewComment.Body, new { @class = "form-control" })
</div>
<input type="submit" class="btn btn-primary" value="Add Comment" />
}
此视图然后调用以下 c# 控制器方法:
[HttpPost]
public ActionResult Details(int id,DetailsViewModel model)
{
if (!ModelState.IsValid)
return View(model);
var content =_data.First(c => c.Id == id);
content.Comments.Add(model.NewComment);
return View(new DetailsViewModel(content));
}
如果我使用表单而不添加任何额外的代码来使用 jquery 捕获提交,那么这一切都可以正常工作。
当我将以下 JQuery 代码添加到页面时,上面的服务器代码不会被执行(我知道我实际上并没有在上面的方法中返回任何 json,但是如果没有执行该方法,那现在看起来是多余的吗?):
$(document).ready(function () {
$("#commentForm").submit(function (event) {
event.preventDefault();
var url = $(this).attr('action');
$.getJSON(url, $(this).serialize(), function (comment) {
alert(comment)
});
});
});
如果还值得注意的是,如果我在 getjson 调用周围添加任何警报,那么这些都会正确触发。
有人知道我做错了什么吗?
【问题讨论】:
标签: c# javascript jquery asp.net-mvc razor