复杂列表子项的ASP.NET MVC 5编辑选项

乔希

我有一个名为Job的对象,属性之一是步骤列表:

public class Job
{
    [Display(Name = "Id")]
    public int? JobId { get; set; }

    [Required]
    public string Name { get; set; }

    public List<Step> Steps { get; set; }

    public Job()
    {
        Steps = new List<Step>();
    }
}

public class Step
{
    public int? StepId { get; set; }

    public int JobId { get; set; }

    [Required]
    public string Name { get; set; }
}

我有一个具有以下操作的JobController来执行更新:

   // PUT: /Job/Edit/5
   [HttpPut]
   public ActionResult Edit(Job model)
   {
     // Logic to update model here
   }

基于此问题的答案,我将UI(使用MVC5随附的Bootstrap模板)更新为:

@using (Html.BeginForm())
{
    @Html.HttpMethodOverride(HttpVerbs.Put)
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        @Html.HiddenFor(model => model.JobId)

        <div class="form-group">
            @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })

            <div class="col-md-10">
                @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
            </div>
        </div>

        <h3>Steps</h3>
        <div>
            @foreach (var item in Model.Steps)
            {
                <div class="form-group">
                    @Html.Hidden("Steps[" + stepIndex + "].StepId", item.StepId)
                    @Html.LabelFor(modelItem => item.Name, htmlAttributes: new { @class = "control-label col-md-2" })

                    <div class="col-md-10">
                        <input class="form-control text-box single-line" data-val="true" data-val-required="The Name field is required."
                               id="@String.Format("Steps_{0}__Name", stepIndex)" name="@String.Format("Steps[{0}].Name", stepIndex)" type="text" value="@item.Name" />

                     @Html.ValidationMessageFor(modelItem => item.Name, "", new { @class = "text-danger" })
                    </div>
                </div>
                stepIndex += 1;
                <hr />
            }
        </div>
        <div class="form-group">
             <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Save" class="btn btn-default" />
                </div>
            </div>
        </div>
}

如您所见,与使用Html.EditorFor相对,我必须手动构建输入标签。原因是我需要控制ID的名称,以便它将Index传递给ID和名称。我认为有一种更好的方法可以使MVC使用labelFor,EditorFor和ValidationMessageFor呈现正确的值。

我的问题是:

  1. 我可以在MVC5中使用一组控件,这些控件使我无需执行这些额外步骤即可呈现复杂的子对象吗?
  2. 如果1否,那么是否有比手动创建输入标签更好的方法?
扎巴夫斯基

选项1:将foreach循环替换为for

@for (int i = 0; i < Model.Steps.Count; i++)
{
    <div class="form-group">
        @Html.HiddenFor(m => m.Steps[i].StepId)
        @Html.TextBoxFor(m => m.Steps[i].Name, new { @class = "form-control text-box single-line" })
        ...
    </div>
}

选项2:创建一个Step.chtmlStep该类调用的编辑器模板然后使用EditorFor

Step.chtml

@model Step
<div class="form-group">
    @Html.HiddenFor(m => m.StepId)
    @Html.TextBoxFor(m => m.Name, new { @class = "form-control text-box single-line" })
    ...
</div>

主视图

<h3>Steps</h3>
<div>
    @Html.EditorFor(m => m.Steps)
<div>

通过这两种方式,框架将为输入提供正确的名称和ID。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

复杂列表子项的ASP.NET MVC 5编辑选项

来自分类Dev

ASP.NET MVC 5模型绑定编辑视图

来自分类Dev

ASP .NET MVC 5 根据角色和/或状态编辑表单

来自分类Dev

Asp.Net MVC 5填充编辑器用于当下拉列表项更改时

来自分类Dev

ASP.NET MVC5中的复杂路由

来自分类Dev

ASP.NET MVC“可编辑”列表框

来自分类Dev

asp.net mvc; 一次仅针对一个用户的编辑选项

来自分类Dev

Asp.net MVC5引导程序:无法在编辑页面下拉列表中获取选定的值

来自分类Dev

Asp.net MVC5引导程序:无法在编辑页面下拉列表中获取选定的值

来自分类Dev

ASP.NET MVC 5设置下拉列表的值

来自分类Dev

ASP.NET MVC 5模型绑定列表为空

来自分类Dev

ASP.NET MVC 5模型绑定列表为空

来自分类Dev

在asp.net mvc 5中创建可编辑的cshtml视图页面

来自分类Dev

带Bootstrap编辑器的Asp.net MVC5

来自分类Dev

如何使用视图模型在asp.net mvc 5中进行编辑?

来自分类Dev

如何在asp.net mvc 5中无冗余地更新/编辑上载的文件?

来自分类Dev

如何在ASP.NET MVC5中编辑.cshtml文件

来自分类Dev

如何使用视图模型在asp.net mvc 5中进行编辑?

来自分类Dev

在asp.net mvc 5中创建可编辑的cshtml视图页面

来自分类Dev

ASP NET MVC OutputCache VaryByParam复杂对象

来自分类Dev

ASP.NET MVC复杂模型更新

来自分类Dev

Asp.net- Mvc复杂模型绑定

来自分类Dev

asp.net mvc 5 DropDownList可为空的int默认选项不为null

来自分类Dev

AngularJs和ASP.NET MVC 5-覆盖ng-model的SELECT选择的选项

来自分类Dev

asp.net mvc 5 DropDownList可为空的int默认选项不为null

来自分类Dev

ASP.NET MVC 5模型类名称的任何“ DisplayName”选项

来自分类Dev

为ASP.NET MVC 5项目设计更复杂的数据库

来自分类Dev

ASP.NET 5和MVC的目的

来自分类Dev

ASP.Net MVC 5 + SignalR + Ninject

Related 相关文章

  1. 1

    复杂列表子项的ASP.NET MVC 5编辑选项

  2. 2

    ASP.NET MVC 5模型绑定编辑视图

  3. 3

    ASP .NET MVC 5 根据角色和/或状态编辑表单

  4. 4

    Asp.Net MVC 5填充编辑器用于当下拉列表项更改时

  5. 5

    ASP.NET MVC5中的复杂路由

  6. 6

    ASP.NET MVC“可编辑”列表框

  7. 7

    asp.net mvc; 一次仅针对一个用户的编辑选项

  8. 8

    Asp.net MVC5引导程序:无法在编辑页面下拉列表中获取选定的值

  9. 9

    Asp.net MVC5引导程序:无法在编辑页面下拉列表中获取选定的值

  10. 10

    ASP.NET MVC 5设置下拉列表的值

  11. 11

    ASP.NET MVC 5模型绑定列表为空

  12. 12

    ASP.NET MVC 5模型绑定列表为空

  13. 13

    在asp.net mvc 5中创建可编辑的cshtml视图页面

  14. 14

    带Bootstrap编辑器的Asp.net MVC5

  15. 15

    如何使用视图模型在asp.net mvc 5中进行编辑?

  16. 16

    如何在asp.net mvc 5中无冗余地更新/编辑上载的文件?

  17. 17

    如何在ASP.NET MVC5中编辑.cshtml文件

  18. 18

    如何使用视图模型在asp.net mvc 5中进行编辑?

  19. 19

    在asp.net mvc 5中创建可编辑的cshtml视图页面

  20. 20

    ASP NET MVC OutputCache VaryByParam复杂对象

  21. 21

    ASP.NET MVC复杂模型更新

  22. 22

    Asp.net- Mvc复杂模型绑定

  23. 23

    asp.net mvc 5 DropDownList可为空的int默认选项不为null

  24. 24

    AngularJs和ASP.NET MVC 5-覆盖ng-model的SELECT选择的选项

  25. 25

    asp.net mvc 5 DropDownList可为空的int默认选项不为null

  26. 26

    ASP.NET MVC 5模型类名称的任何“ DisplayName”选项

  27. 27

    为ASP.NET MVC 5项目设计更复杂的数据库

  28. 28

    ASP.NET 5和MVC的目的

  29. 29

    ASP.Net MVC 5 + SignalR + Ninject

热门标签

归档