在一个视图中创建的主细节

时间:2015-01-17 09:39:11

标签: 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> 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和刷新页面。

2 个答案:

答案 0 :(得分:0)

是的,你可以。有几种选择:

使用Js网格状组件

使用一些js网格组件,我更喜欢jqgrid您可以在View上添加数据,然后在 POST 上将其序列化到控制器

优势:您不需要使用网格编写js CRUD操作,您应该获得的唯一方法是如何将本地数据正确地序列化到控制器。

缺点:您应该了解组件是如何工作的,并且可能是某些组件在MVC项目中不易实现(我的意思是您可能在客户端丢失了模型验证,数据注释等)

使用js

添加标记

编写您自己的js来解决此问题。 Here是如何做到的好基本示例。您使用js生成html(从控制器获取js)并将其添加到View中的想法。

优势:你可以做任何你想要的事情你知道js。

缺点:您在客户端丢失了模型验证,数据注释等。

将PartialView与js

一起使用

使用 Ajax ControllerPartialViewPersonnelDegree获取标记,并使用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 );