我的部分视图已加载到我的页面中,只显示了一个评论框。
我想要做的就是通过NHibernate将这些数据保存到我的数据库中,但最初我想确保数据实际上是在我的控制器上。
型号:
public class Recommendation : Entity
{
public virtual int id { get; set; }
public virtual int CustomerId { get; set; }
public virtual int BookingId { get; set; }
public virtual string Recommend { get; set; }
public virtual IEnumerable<SelectListItem> RecommendList { get; set; }
public virtual string Comments { get; set; }
}
控制器:
public class RecommendationController : Controller
{
[HttpGet]
public ActionResult Index()
{
Recommendation model = new Recommendation();
return View(model);
}
[HttpPost]
public JsonResult Save(Recommendation model)
{
string data = string.Format("You selected = {0}", model.Comments);
return new JsonResult { Data = new { userData = data } };
}
}
查看:
@model Breaks.Core.Model.Recommendation
<script type="text/javascript">
var AJAX_URL = '@Url.Action("Save", "Recommendation")';
</script>
<form id="recommendUsForm">
<div class="form-group">
@Html.LabelFor(m => m.Comments)
@Html.TextBoxFor(m => m.Comments, new { @class = "form-control", Name="Comments", id = "Comments" })
</div>
<button type="button" value="submit" id="save">Submit</button>
</form>
JavaScript的:
$(function () {
$("#save").click(function (e) {
e.preventDefault();
var userData = {
Comments: $('#Comments').val()
}
$.ajax({
type: "POST",
data: JSON.stringify(userData),
url: AJAX_URL,
dataType: 'JSON',
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert(data);
}
});
});
});
当我点击“提交”按钮时,我确实会弹出警报,这表明我至少获得了成功,但警报中的信息只是“您选择了=”并且评论中没有文字框。
我错过了什么?为什么不回发数据?
谢谢,
编辑:我的代码的最新更改仍然出错。 我现在得到的错误是“已经添加了具有相同密钥的项目。”
答案 0 :(得分:0)
JS对象中的属性名称与C#代码中的模型不匹配,因此ModelBinder无法实现它的魔力。将userComment
更改为Comments
,假设您只想绑定到模型的那个属性,如下所示:
var userData = {
Comments: $('#Comments').val()
}
答案 1 :(得分:0)
假设您要保存其余的模型数据,您可以序列化表单数据并让ModelBinder完成剩余的工作。
$.ajax({
type: "POST",
data: $('#recommendUsForm').serialize(),
url: AJAX_URL,
success: function (data) {
alert(data);
}
});