查看:
@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&amp; textboxfor等?
当我检查FormCollection对象时,它具有我需要的所有键和所有值,但是,我想从我的字段中获取一些其他值,例如data-fieldid-itemid =“1”,如何我做到了吗?最好的方法是什么?
是否需要使用LabelFor / TextboxFor?
我想我所期待的是填充数据的模型对象,以及我的模型对象的子项,特别是公共虚拟ICollection Fields {get;组;也要填写。
我有一种感觉,我在这里缺少一些概念,任何想法?
谢谢!
答案 0 :(得分:1)
首先,您不应该对表单使用部分视图。相反,您应该使用EditorTemplates。
其次,您无法获取属性,因为浏览器不会将这些属性发布到服务器。 MVC坚持使用浏览器支持的机制。
你的选择是,使用提交处理程序用您的属性填充隐藏字段,将数据放在隐藏字段中开始,做一个ajax帖子,在其中设置您要发布的所有数据,或者只是让你的控制器&#34;记得&#34;它在GET中设置的属性。