在ASP.NET MVC中通过AJAX创建和发送整个模型

时间:2017-10-14 18:15:15

标签: ajax asp.net-mvc asp.net-mvc-4

我正在尝试通过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" })

当用户修改数据并单击保存按钮时,View可以从这些控件构建新数据并将其发送到Controller(它只是将模型保存到数据库)。

我试图通过AJAX做同样的事情,但是我在访问"已经构建的"时遇到了问题。来自控件的模型......

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);
}

2 个答案:

答案 0 :(得分:2)

由于表单在添加AJAX之前正常工作,大概你有<form>包围输入元素?如果是这样,您可以序列化该表单。因此,举例来说,假设您的表单有id="myForm",那么您可以执行以下操作:

var model = $('#myForm').serialize();

答案 1 :(得分:1)

 @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 将不会被解雇< / p>