在一个视图中创建主从
Master-Detail created in one View
我有一个带子模型的模型。
[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>
我可以在此视图中添加多个 PersonnelDegrees 吗?
编辑
我在度数视图中添加了一个 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并刷新页面。
是的,你可以。有几种方法可以选择:
使用Js类网格组件
使用一些 js
网格组件,我更喜欢 jqgrid 你可以用它在你的 View
上本地添加数据,然后在表单 [=70 上序列化它=] 到控制器。
优点:你不需要自己用你的网格编写 js CRUD 操作,你唯一应该得到的是如何以正确的方式将本地数据序列化到控制器。
缺点:您应该了解组件的工作原理,并且可能是某些组件在 MVC 项目中不容易实现(我的意思是您可能会丢失模型验证、数据注释等)客户端)
使用 js 添加标记
编写您自己的 js
来解决此问题。 Here 是一个很好的基本示例,说明如何操作。您使用 js(从控制器获取 js)生成 html 并将其添加到您的视图的想法。
优点:你可以做任何你想做的事情,只要你懂js。
缺点:您在客户端丢失了模型验证、数据注释等。
在 js 中使用 PartialView
使用 Ajax 从 Controller
获取标记(PartialView
用于您的 PersonnelDegree
)并将其附加到您的 View
与 js.
优势:您可以利用所有 ViewModel
优势 (DataAnnotations
),此外您还可以在 CRUD 控制器方法,如果你需要的话。如果您的项目很大并且失去生命周期,它也是最容易维护的解决方案。
缺点: 您应该学习如何在标记来自 ajax 调用时初始化客户端验证。通常这种方法也会迫使您编写大量代码。
如果我有时间,我更喜欢最后一个选项。
您可以使用部分视图为人事学位添加项目。要在此视图中添加多个人员学位,您需要在控制器中创建对象
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 );
我有一个带子模型的模型。
[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>
我可以在此视图中添加多个 PersonnelDegrees 吗?
编辑
我在度数视图中添加了一个 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并刷新页面。
是的,你可以。有几种方法可以选择:
使用Js类网格组件
使用一些 js
网格组件,我更喜欢 jqgrid 你可以用它在你的 View
上本地添加数据,然后在表单 [=70 上序列化它=] 到控制器。
优点:你不需要自己用你的网格编写 js CRUD 操作,你唯一应该得到的是如何以正确的方式将本地数据序列化到控制器。
缺点:您应该了解组件的工作原理,并且可能是某些组件在 MVC 项目中不容易实现(我的意思是您可能会丢失模型验证、数据注释等)客户端)
使用 js 添加标记
编写您自己的 js
来解决此问题。 Here 是一个很好的基本示例,说明如何操作。您使用 js(从控制器获取 js)生成 html 并将其添加到您的视图的想法。
优点:你可以做任何你想做的事情,只要你懂js。
缺点:您在客户端丢失了模型验证、数据注释等。
在 js 中使用 PartialView
使用 Ajax 从 Controller
获取标记(PartialView
用于您的 PersonnelDegree
)并将其附加到您的 View
与 js.
优势:您可以利用所有 ViewModel
优势 (DataAnnotations
),此外您还可以在 CRUD 控制器方法,如果你需要的话。如果您的项目很大并且失去生命周期,它也是最容易维护的解决方案。
缺点: 您应该学习如何在标记来自 ajax 调用时初始化客户端验证。通常这种方法也会迫使您编写大量代码。
如果我有时间,我更喜欢最后一个选项。
您可以使用部分视图为人事学位添加项目。要在此视图中添加多个人员学位,您需要在控制器中创建对象
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 );