这是JS:
$('#createReview').click(function () {
CKEDITOR.instances['ReviewText'].updateElement();
$.ajax({
type: 'POST',
cache: false,
url: '/Review/Create',
data: $('#reviewForm').serialize(),
dataType: 'html',
success: function (response) {
$('#bookReview').html(response);
}
});
return false;
});
'createReview'是
行动:
[HttpPost, ExportModelState]
public ActionResult Create(Review review)
{
if (ModelState.IsValid)
{
if (review.Create())
return PartialView("EditReview", review);
}
return RedirectToAction("Edit");
}
发布表单时,会创建审阅,但只有字符串属性绑定 - 在本例中为ReviewText。所有整数属性都没有绑定。
最奇怪的是,当我在调试模式下运行时, none 属性成功绑定,甚至不是ReviewText。当我检查Review对象时,所有内容都为null或默认值。
我在常规模式和调试之间来回走动,每次都做同样的事情。
我很茫然。
修改
以下是Serialize()调用的完整输出,它不适合注释:
得分= 0&安培;得分= 0&安培;得分= 0&安培;得分= 0&安培;得分= 0&安培;得分= 0&安培;得分= 0&安培;得分= 0&安培;得分= 0&安培;得分= 0&安培; Book.Review.Rating = 0&安培;等级= 0安培; ReviewID = 0&安培; ParentBookID = 1&安培; reviewText =%3CP%3E%0A%09I%26%2339%3BM +的+白痴%3C%2FP%3E%0A%3Cbr +%2F%3E%0A% 3Cdiv + firebugversion%3D%221.5.4%22 + ID%3D%22_firebugConsole%22 +风格%3D%22display%3A +无%3B%22%3E%0A%09%26nbsp%3B%3C%2Fdiv%3E% 0A%3Cbr +%2F%3E%0A&安培; dateCreated会= 1%2F1%2F0001 + 12%3A00%3A00 + AM
请注意,在我的整个数据库中找不到“得分”,所有关于Firebug的垃圾都在那里混合。
编辑#2:
好的,所有这些“得分”输入都来自jQuery Raty插件,该插件很快就没有插件了。
Firebug正在整理来自CKEditor实例的文本,该文本在提交表单之前甚至没有更新。
这个客户端的东西肯定是爆炸!
哎呀...
答案 0 :(得分:3)
您尚未展示您的模型类如何与您的表单所包含的输入元素相似。试图重现这里的问题是我创建的一个工作示例。它应该非常接近你的场景:
型号:
public class Review
{
public int ReviewID { get; set; }
public int ParentBookID { get; set; }
public int Rating { get; set; }
public string ReviewText { get; set; }
public int[] Scores { get; set; }
}
控制器:
public class ReviewController : Controller
{
public ActionResult Edit()
{
var model = new Review
{
ReviewID = 1,
Rating = 5,
Scores = new[] { 1, 2, 3 }
};
return View(model);
}
[HttpPost]
public ActionResult Create(Review review)
{
if (ModelState.IsValid)
{
if (review.Create())
{
return PartialView("EditReview", review);
}
}
// Notice that redirecting in an AJAX invoked action will simply
// send an HTTP redirect to the Edit action and redisplay the whole page
// which is probably not what you are looking for. Maybe it would be better
// to return a partial here.
return RedirectToAction("Edit");
}
}
查看:
<% using (Html.BeginForm("Create", "Review", FormMethod.Post, new { id = "reviewForm" })) { %>
<div>
<%: Html.LabelFor(x => x.ReviewID)%>
<%: Html.TextBoxFor(x => x.ReviewID)%>
</div>
<div>
<%: Html.HiddenFor(x => x.ParentBookID)%>
</div>
<div>
<%: Html.LabelFor(x => x.Rating)%>
<%: Html.TextBoxFor(x => x.Rating)%>
</div>
<div>
<%: Html.LabelFor(x => x.ReviewText)%>
<%: Html.TextAreaFor(x => x.ReviewText)%>
</div>
<%: Html.EditorFor(x => x.Scores)%>
<input type="submit" value="Review" />
<% } %>
<div id="bookReview"></div>
脚本:
<script type="text/javascript" src="<%: Url.Content("~/scripts/jquery-1.4.1.min.js") %>"></script>
<script type="text/javascript">
$(function () {
$('#reviewForm').submit(function () {
$.ajax({
type: this.method,
url: this.action,
data: $(this).serialize(),
dataType: 'html',
success: function (response) {
$('#bookReview').html(response);
}
});
return false;
});
});
</script>
您还可以查看优秀的jquery form plugin,以便您的脚本简化为:
$(function () {
$('#reviewForm').ajaxForm(function(response) {
$('#bookReview').html(response);
});
});
答案 1 :(得分:0)
我要继续把这个插件粉碎到一个糟糕的插件组合:Firebug,CKEditor和Raty。