Asp.net mvc 在一个视图中创建的主详图
我有一个模特儿模特儿Asp.net mvc 在一个视图中创建的主详图,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,model-view-controller,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Model View Controller,我有一个模特儿模特儿 [Table("Personnel")] public class Personnel { [Key] public int Id { get; set; } [MaxLength(10)] public string Code { get; set; } [MaxLength(20)] public string Name { get; set; } public virtual List<PersonnelDegree> D
[Table("Personnel")]
public class Personnel
{
[Key]
public int Id { get; set; }
[MaxLength(10)]
public string Code { get; set; }
[MaxLength(20)]
public string Name { get; set; }
public virtual List<PersonnelDegree> Degrees
{
get;
set;
}
}
public class PersonnelDegree
{
[Key]
public int Id { get; set; }
[ForeignKey("Personnel")]
public int PersonnelId { get; set; }
public virtual Personnel Personnel { get; set; }
[UIHint("Enum")]
public Degree Degree { get; set; }
public string Major { get; set; }
public string SubField { get; set; }
public string Location { get; set; }
}
它添加了一个div,但几秒钟后隐藏div并刷新页面。是的,您可以。有几种方法可供选择: 使用Js网格组件 使用一些
js
网格组件,我希望您可以使用它在视图上本地添加数据,然后在表单POST中将其序列化到控制器
优点:您不需要自己用网格编写js CRUD操作。您应该得到的唯一东西是如何以正确的方式将本地数据序列化到控制器
缺点:您应该了解组件的工作原理,可能是某些组件不容易在MVC项目中部署(我的意思是您可能会丢失您的模型验证、数据注释等客户端)
使用js添加标记
编写自己的js
来解决此问题。这是一个很好的基本例子。使用js生成html(从controller获取js)并将其添加到视图中
优势:你想做什么就做什么,只要你知道js
缺点:您在客户端丢失了模型验证、数据注释等
将PartialView与js一起使用
使用Ajax从Controller
获取标记(PartialView
用于您的personnelgree
),并使用js将其附加到您的视图
优点:您可以使用所有ViewModel
优点(DataAnnotations
),如果需要,还可以在CRUD控制器方法中添加一些tricki逻辑。此外,如果您的项目很大,并且有生命周期,那么它也是最容易维护的解决方案
缺点:当标记来自ajax调用时,您应该学习如何初始化客户端验证。通常这种方法也会迫使您编写大量代码
如果有时间,我更喜欢最后一个选项。您可以使用局部视图为人员级别添加项目。
要在此视图中添加多个PersonnedGreees,需要在控制器中创建对象
Personnel pers = new Personnel();
PersonnelDegrees pr_obj = new PersonnelDegrees ();
ind_obj.PersonnelDegrees .Add(pr_obj );
PersonnelDegrees pr_obj1 = new PersonnelDegrees ();
ind_obj.PersonnelDegrees .Add(pr_obj1 );
要渲染现有的personnelgree
对象,您需要一个循环EditorTemplate
。要添加新的personnelgree
对象,可以使用javascript/jquery动态添加/删除。参考示例,非常感谢,如何将其发送给控制器?如果您的模型是人员
,并且您的post方法是公共操作结果创建(人员模型)
,那么模型将被正确绑定密钥是绑定集合是为了确保控件被正确命名并为绑定编制索引,所以你需要像
等控件。谢谢,我用display:none和add all item(Degrees[#].Name)添加了一个div,但是当我在Degrees div(append)中添加这个div时,再次加载页面add remove new div。非常感谢,如果我使用部分视图,如何将Partialview中的日期列表发送到主控制器?我在回答中已经提供了这一点,这正是您需要的Ajax调用get view,并将视图生成的html添加到DOM中
<div id="Degrees">
<div id="NewDegree" style="display:none">
<div class="form-group">
<input class="form-control" id="Degrees[#].Major" name="Degrees[#].Major" value="" type="text">
// another items
</div>
</div>
</div>
$(document).ready(function() {
$(function() {
$("#addItem").click(function () {
var index = $('#Degrees tbody tr').length; // assumes rows wont be deleted
var clone = $('#NewDegree').html();
// Update the index of the clone
clone.replace(/\[#\]/g, '[' + index + ']');
clone.replace(/"%"/g, '"' + index + '"');
$('#Degrees').append(clone);
});
);
});
Personnel pers = new Personnel();
PersonnelDegrees pr_obj = new PersonnelDegrees ();
ind_obj.PersonnelDegrees .Add(pr_obj );
PersonnelDegrees pr_obj1 = new PersonnelDegrees ();
ind_obj.PersonnelDegrees .Add(pr_obj1 );