【问题标题】:Partial view not serializing in ajax Post request MVC部分视图未在 ajax Post 请求 MVC 中序列化
【发布时间】:2015-12-20 07:05:39
【问题描述】:

为我的页面实现自动保存功能。所以在一定的时间间隔后调用动作Autosave()。但是我的页面开始形成包括部分视图。后间隔调用的代码工作正常。

<script type="text/javascript">
    window.setInterval(function () {       
        var form = $("#addpost");
        $.ajax({
            url: '@Url.Action("AutoSavePostAction", "MyControllerName")',
            data: form.serialize(),
            type: 'POST',
            success: function (data) {
                $("#Id").val(data);
            }
        });
    }, 30000); 

视图是:

@using (Html.BeginForm("SavePostAction", "MyControllerName", FormMethod.Post, new { enctype = "multipart/form-data", id="addpost" }))
{
    .................
    @Html.Partial("_TextPostPartial", Model);
    .................
}

SavePostAction 在调用提交之后。在此提交中,从 Partial 视图中获取值,这不是问题。 但是在ajax调用中,部分视图不包括在序列化中。 这里_TextPostPartial 拥有与模型强绑定的CKEditor。 像部分视图一样:

<textarea id="Description" name="Description">@Html.Raw(Model.Description)</textarea>

已编辑:

[HttpPost]
public ActionResult AutoSavePostAction(PostDTO postDTO, FormCollection postFormCollection)
{
}

[HttpPost]
[MemberFunction]
public ActionResult SavePostAction(PostDTO postDTO, FormCollection postFormCollection)
 {
 }

【问题讨论】:

  • 只有Model.DescriptionAutoSavePostAction()方法中没有绑定吗?物业是用[AllowHtml]装饰的吗?您还应该显示两个控制器方法的签名。
  • 哦..忘了添加。请检查问题。是的,只有 Model.Description 没有显示价值
  • 为什么你有FormCollection的参数?这两种方法之间的区别在于工作具有[MemberFunction] 过滤器属性。它有什么作用?
  • 是故意的,[MemberFunction] 是为了会员资格。 FormCollection 用于一些单选按钮逻辑。我认为这与实际问题无关。
  • 好吧,[MemberFunction] 是签名中唯一的区别,表明它可能是一个问题。除非您的视图设计不当,否则不应要求 FormCollection。您应该调试您的脚本 - var data = form.serialize(); 返回什么 - 它是否包含 Description 的名称/值对?

标签: razor serialization asp.net-mvc-5 partial-views


【解决方案1】:

在序列化表单数据之前,需要将CKEditor的值赋给输入

 window.setInterval(function () {     
    $("#Description").val(CKEDITOR.instances['Description'].getData()); // add this
    var form = $("#addpost");
    $.ajax({
        url: '@Url.Action("AutoSavePostAction", "MyControllerName")',
        data: form.serialize(),
        type: 'POST',
        success: function (data) {
            $("#Id").val(data);
        }
    });
}, 30000); 

【讨论】:

  • 看看不要浪费时间......值得;)
猜你喜欢
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多