我有一个包含多个不同标签的表单。主选项卡包含有关此人的所有主要信息,其余选项卡由多个列表组成。
其中一个标签包含与该人相关的所有评论的列表。该选项卡还有一个允许用户插入新评论的按钮。
我所做的是进行ajax调用并加载创建视图,将视图替换为列表。这样的事情。
$("#btnNewAnnotation").click(function (e) {
$.ajax({
url: "/Annotations/Create",
cache: false,
data: { personId: $("#personId").val(), withouLayout: true },
type: "GET",
success: function (data, textStatus, jqXHR) {
alert("alert of success!!");
$("#annotationContent").html(data);
},
error: function (statusText, errorText) {
alert(errorText);
}
});
});
现在控制器它做了什么它转储部分视图,允许我将新HTML放在 annotationContent div
public ActionResult Create(string personId, string withouLayout)
{
ViewBag.AnnotationTypeId = new SelectList(db.annotationtypes, "AnnotationTypeId", "Name");
annotations annotation = new annotations();
annotation.PersonId = personid;
return PartialView(annotation);
}
这一切都很好,没有任何问题。我遇到的问题是在数据库中插入注释后。我想要做的是重新加载包含所有评论的列表,但只更新div annotationContent
我有以下ajax
$("#createAnnotationForm").on("submit", function () {
e.preventDefault();
$.ajax({
url: "/Annotations/Create",
cache: false,
data: $(this).serialize(),
dataType: "json",
type: "POST",
success: function (data, textStatus) {
//This alert never gets Called!!
alert("ajax insert success");
},
error: function (statusText, errorText) {
alert('Error: ' + errorText)
}
});
});
我这样做的原因是因为视图上有多个表单,我只想提交此表单。我的控制器有以下
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(annotations annotations)
{
try
{
db.annotations.Add(annotations);
db.SaveChanges();
}
catch(Exception ex)
{
}
return PartialView(db.annotations);
}
当我提交表单时,我收到错误
The model item passed into the dictionary is of type 'System.Data.Entity.DbSet`1[RecruitmentWeb.Models.annotations]', but this dictionary requires a model item of type 'RecruitmentWeb.Models.annotations'.
我理解为什么会收到此错误,但我不知道如何在不重新加载整个页面的情况下重新加载我的评论列表。任何人都有任何想法?
答案 0 :(得分:0)
您通常希望传入注释类的单个实例。
我假设注释是DbSet,注释是你的实际类。
所以它会是
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(annotation annotation)
{
try
{
db.annotations.Add(annotation);
db.SaveChanges();
}
catch(Exception ex)
{
}
return PartialView(db.annotations);
}