在 ASP.NET MVC 中通过 AJAX 创建并发送整个模型
Create and send whole model via AJAX in ASP.NET MVC
我正在尝试通过 AJAX 实现一些保存功能。我有一个视图,其控件定义如下,将从模型中填充:
@Html.LabelFor(model => model.mediaName, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.mediaName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.mediaName, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.mediaName, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.mediaName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.mediaName, "", new { @class = "text-danger" })
当用户修改数据并单击保存按钮时,视图能够从这些控件构建新数据并将其发送到控制器(它只是将模型保存到数据库)。
我正在尝试做同样的事情,但是通过 AJAX 但是我在从控件访问 "already-built" 模型时遇到问题...
function saveDetails() {
var model = //HOW I GET THE MODEL?
$.ajax({
url: '/Media/SaveDetails',
dataType: 'html',
data: {
obj: model
},
success: function (data) {
}
});
}
有什么方法可以访问该模型吗?或者我应该逐个控制地构建它?
编辑:这就是我希望控制器获得操作的方式:
(中是模型中使用的实体)
public ActionResult SaveDetails(DomainModel.Medium obj)
{
db.Entry(obj).State = EntityState.Modified;
db.SaveChanges();
return PartialView("_MediaModalDetails", obj);
}
由于表单在添加 AJAX 之前工作正常,大概您有一个 <form>
包含输入元素?如果是这样,您可以序列化该表单。因此,例如,假设您的表单有 id="myForm"
,那么您可以这样做:
var model = $('#myForm').serialize();
@using (Ajax.BeginForm("SaveDetails", "Media", new AjaxOptions { HttpMethod = "POST", OnSuccess = "AfterEntry()", OnBegin="ValidateForm()"}, new { id = "myForm" }))
它做同样的事情,你会让我写一个外部
$.ajax({
url: '/Media/SaveDetails',
type: "POST",
data: {obj: $('#myForm').serialize() },
success: function (data) { AfterEntry(data) }
})
// 不需要 dataType:'html' 作为它的 json
使用 Ajax.BeginForm 技术还将对 model.mediaName 进行服务器端 属性 验证,您在数据注释
例如
[Required(ErrorMessage = "Media Name is required")]
public string mediaName{ get; set; }
如果 mediaName 为空,使用 ajax.BeginForm 将显示错误消息。
即 @Html.ValidationMessageFor 将被解雇
如果你想做同样的事情但是通过外部 Ajax 否则你将不得不在 jquery 中编写额外的长验证,否则 @Html.ValidationMessageFor不会被解雇
我正在尝试通过 AJAX 实现一些保存功能。我有一个视图,其控件定义如下,将从模型中填充:
@Html.LabelFor(model => model.mediaName, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.mediaName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.mediaName, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.mediaName, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.mediaName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.mediaName, "", new { @class = "text-danger" })
当用户修改数据并单击保存按钮时,视图能够从这些控件构建新数据并将其发送到控制器(它只是将模型保存到数据库)。
我正在尝试做同样的事情,但是通过 AJAX 但是我在从控件访问 "already-built" 模型时遇到问题...
function saveDetails() {
var model = //HOW I GET THE MODEL?
$.ajax({
url: '/Media/SaveDetails',
dataType: 'html',
data: {
obj: model
},
success: function (data) {
}
});
}
有什么方法可以访问该模型吗?或者我应该逐个控制地构建它?
编辑:这就是我希望控制器获得操作的方式: (中是模型中使用的实体)
public ActionResult SaveDetails(DomainModel.Medium obj)
{
db.Entry(obj).State = EntityState.Modified;
db.SaveChanges();
return PartialView("_MediaModalDetails", obj);
}
由于表单在添加 AJAX 之前工作正常,大概您有一个 <form>
包含输入元素?如果是这样,您可以序列化该表单。因此,例如,假设您的表单有 id="myForm"
,那么您可以这样做:
var model = $('#myForm').serialize();
@using (Ajax.BeginForm("SaveDetails", "Media", new AjaxOptions { HttpMethod = "POST", OnSuccess = "AfterEntry()", OnBegin="ValidateForm()"}, new { id = "myForm" }))
它做同样的事情,你会让我写一个外部
$.ajax({
url: '/Media/SaveDetails',
type: "POST",
data: {obj: $('#myForm').serialize() },
success: function (data) { AfterEntry(data) }
})
// 不需要 dataType:'html' 作为它的 json
使用 Ajax.BeginForm 技术还将对 model.mediaName 进行服务器端 属性 验证,您在数据注释
例如
[Required(ErrorMessage = "Media Name is required")]
public string mediaName{ get; set; }
如果 mediaName 为空,使用 ajax.BeginForm 将显示错误消息。 即 @Html.ValidationMessageFor 将被解雇
如果你想做同样的事情但是通过外部 Ajax 否则你将不得不在 jquery 中编写额外的长验证,否则 @Html.ValidationMessageFor不会被解雇