Here is the 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' is
The action:
[HttpPost, ExportModelState]
public ActionResult Create(Review review)
{
if (ModelState.IsValid)
{
if (review.Create())
return PartialView("EditReview", review);
}
return RedirectToAction("Edit");
}
When the form is posted, the review is created, but only the string property is binding--in this case the ReviewText. None of the integer properties are binding at all.
The strangest part is, when I run it in debug mode, none of the properties successfully bind, not even the ReviewText. When I inspect the Review object everything is either null or default.
I went back and forth between regular mode and debug, and it does the same thing every time.
I'm at a loss.
Edit:
Here is the full output of the Serialize() call, that won't fit in a comment:
score=0&score=0&score=0&score=0&score=0&score=0&score=0&score=0&score=0&score=0&Book.Review.Rating=0&Rating=0&ReviewID=0&ParentBookID=1&reviewText=%3Cp%3E%0A%09I%26%2339%3Bm+an+idiot%3C%2Fp%3E%0A%3Cbr+%2F%3E%0A%3Cdiv+firebugversion%3D%221.5.4%22+id%3D%22_firebugConsole%22+style%3D%22display%3A+none%3B%22%3E%0A%09%26nbsp%3B%3C%2Fdiv%3E%0A%3Cbr+%2F%3E%0A&DateCreated=1%2F1%2F0001+12%3A00%3A00+AM
Note that "score" is nowhere to be found in my entire database, and all that junk about Firebug mixed in there.
Edit #2:
OK, so all those "score" inputs are coming from the jQuery Raty plugin, which was promptly un-plugin-ed.
Firebug is lousing up the text coming from the CKEditor instance, which is not even getting updated prior to form submission.
This client-side stuff sure is a blast!
Grrr...