我有一个带儿童模型的模型。
[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; }
}
我想为此创建一个视图。(添加)
我添加了pesonnel字段来查看,但是如何为PersonnelDegree添加项目?
@using (Html.BeginForm("Add", "Personnel", FormMethod.Post, new {enctype = "multipart/form-data", @class = "form-horizontal tasi-form", id = "default"}))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, null, new {@class = "alert alert-danger "})
<div class="form-group">
@Html.LabelFor(m => m.Code, new {@class = "control-label col-lg-1"})
<div class="col-lg-3">
@Html.TextBoxFor(m => m.Code, null, new {@class = "form-control", maxlength = 10})
@Html.ValidationMessageFor(m => m.Code)
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Name, new {@class = "control-label col-lg-1"})
<div class="col-lg-3">
@Html.TextBoxFor(m => m.Name, new {@class = "form-control", maxlength = 20})
@Html.ValidationMessageFor(m => m.Name)
</div>
@Html.LabelFor(m => m.Family, new {@class = "control-label col-lg-1"})
<div class="col-lg-3">
@Html.TextBoxFor(m => m.Family, null, new {@class = "form-control", maxlength = 30})
@Html.ValidationMessageFor(m => m.Family)
</div>
</div>
我可以在此视图中添加multy PersonnelDegrees吗?
修改
我为Degrees
添加了一个div <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>
并在javascript中:
$(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);
});
);
});
它添加一个div,但几秒后隐藏div和刷新页面。
答案 0 :(得分:0)
是的,你可以。有几种选择:
使用一些js
网格组件,我更喜欢jqgrid您可以在View
上添加数据,然后在 POST 上将其序列化到控制器
优势:您不需要使用网格编写js CRUD操作,您应该获得的唯一方法是如何将本地数据正确地序列化到控制器。
缺点:您应该了解组件是如何工作的,并且可能是某些组件在MVC项目中不易实现(我的意思是您可能在客户端丢失了模型验证,数据注释等)
编写您自己的js
来解决此问题。 Here是如何做到的好基本示例。您使用js生成html(从控制器获取js)并将其添加到View中的想法。
优势:你可以做任何你想要的事情你知道js。
缺点:您在客户端丢失了模型验证,数据注释等。
使用 Ajax (Controller
为PartialView
从PersonnelDegree
获取标记,并使用js将其附加到View
。
优势:您可以使用所有ViewModel
推荐(DataAnnotations
)加上您可以在 CRUD 控制器方法中添加一些技巧逻辑需要。如果你的项目很大并且有生命危险,它也是最容易维护的解决方案。
缺点:当标记来自ajax调用时,您应该学习如何初始化客户端验证。通常这种方法也会迫使你编写很多代码。
如果我有时间,我更喜欢上一个选项。
答案 1 :(得分:0)
您可以使用部分视图为人员学位添加项目。要在此视图中添加多人员学位,您需要在控制器中创建对象
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 );