0

看法:

@model My.Data.Section

@using (Html.BeginForm("Save", "Sections"))
{
    @Html.Partial("_Fields", Model.Fields);

    <input type="submit" value="Save">
}

查看JS:

@Scripts.Render("~/bundles/jqueryval")
<script type="text/javascript">
    $(function () {
        $('form').submit(function () {
            if ($(this).valid()) {
                $.ajax({
                    url: this.action,
                    type: this.method,
                    data: $(this).serialize(),
                    success: function (result) {
                        // do some stuff with the returned partial
                    }
                });
            }
            return false;
        });
    });
</script>

模型:

来自我的数据层(EF5/DBContext/unitofwork)

namespace My.Data
{
    using System;
    using System.Collections.Generic;

    public partial class Section
    {
        public Section()
        {
            this.Fields = new HashSet<Field>();
        }

        public int SectionID { get; set; }
        public int FormID { get; set; }
        public string Name { get; set; }
        public Nullable<int> PrevSection { get; set; }
        public Nullable<int> NextSection { get; set; }
        public int SortOrder { get; set; }

        public virtual ICollection<Field> Fields { get; set; }
        public virtual Form Form { get; set; }
    }
}

控制器:

[HttpPost]
public ActionResult Save(Section model, FormCollection fc)
{
    // do some fun stuff
    return PartialView("_Section", model);
}

当我调试控制器时,模型对象没有反序列化,我认为这是因为我没有使用 labelfor & textboxfor ect ?

当我检查 FormCollection 对象时,它具有我需要的所有键和所有值,但是,我想从我的字段中获取一些其他值,例如 data-fieldid-itemid="1",我将如何完成这个? 最好的方法是什么?

我需要使用 LabelFor/TextboxFor 吗?

我想我期待的是模型对象通过填充数据,以及我的模型对象的子项,特别是 public virtual ICollection Fields { get; 放; } 也要填写。

我觉得我在这里遗漏了一些概念,有什么想法吗?

谢谢!

4

1 回答 1

1

首先,您不应该对表单使用局部视图。相反,您应该使用 EditorTemplates。

其次,您无法获取属性,因为浏览器不会将这些属性发布到服务器。MVC 受制于浏览器支持的机制。

您的选择是,使用提交处理程序用您的属性填充隐藏字段,将数据放在隐藏字段中,做一个 ajax 帖子,在其中设置您要发布的所有数据,或者只是让您的控制器“记住" 它在 GET 中设置的属性。

于 2012-12-10T22:51:16.207 回答