首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ASP.NET MVC5如何在同一视图中编辑父类型和List<>类型的子类型

在ASP.NET MVC5中,要在同一视图中编辑父类型和其List<>类型的子类型,通常会涉及到模型绑定和视图模型的使用。以下是实现这一功能的基础概念和相关步骤:

基础概念

  1. 模型绑定:ASP.NET MVC 框架自动将HTTP请求中的数据绑定到操作方法的参数上。
  2. 视图模型:为了更好地组织数据和逻辑,通常会创建一个视图模型,它包含了视图所需的所有数据。
  3. 编辑模板:用于渲染集合中每个元素的视图。

实现步骤

1. 定义视图模型

首先,定义一个包含父类型和子类型列表的视图模型。

代码语言:txt
复制
public class ParentViewModel
{
    public string ParentProperty { get; set; }
    public List<ChildViewModel> Children { get; set; }

    public ParentViewModel()
    {
        Children = new List<ChildViewModel>();
    }
}

public class ChildViewModel
{
    public int Id { get; set; }
    public string ChildProperty { get; set; }
}

2. 创建编辑视图

在视图中,使用Html.EditorFor辅助方法来渲染父属性和子属性列表。

代码语言:txt
复制
@model ParentViewModel

@using (Html.BeginForm())
{
    @Html.EditorFor(m => m.ParentProperty)

    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Child Property</th>
            </tr>
        </thead>
        <tbody>
            @Html.EditorFor(m => m.Children)
        </tbody>
    </table>

    <input type="submit" value="Submit" />
}

3. 创建子类型的编辑模板

Views/Shared文件夹中创建一个名为EditorTemplates/ChildViewModel.cshtml的文件,用于渲染每个子项。

代码语言:txt
复制
@model ChildViewModel

<tr>
    <td>@Html.HiddenFor(m => m.Id)</td>
    <td>@Html.EditorFor(m => m.ChildProperty)</td>
</tr>

4. 控制器处理

在控制器中,创建一个处理表单提交的方法。

代码语言:txt
复制
public class YourController : Controller
{
    [HttpGet]
    public ActionResult Edit()
    {
        var viewModel = new ParentViewModel();
        // 初始化viewModel.Children
        return View(viewModel);
    }

    [HttpPost]
    public ActionResult Edit(ParentViewModel viewModel)
    {
        if (ModelState.IsValid)
        {
            // 处理数据保存逻辑
            return RedirectToAction("Success");
        }
        return View(viewModel);
    }
}

优势

  • 代码复用:通过编辑模板可以复用相同的视图代码来渲染集合中的每个元素。
  • 易于维护:将视图逻辑分离到不同的模板中,使得代码更加清晰和易于维护。
  • 灵活性:可以轻松地添加、删除或修改集合中的元素。

应用场景

  • 复杂表单:当表单需要编辑多个相关联的对象时。
  • 动态内容:用户可以在运行时添加或删除表单字段。

常见问题及解决方法

问题:提交表单时,子项的数据没有正确绑定到模型上。

解决方法:确保每个子项都有一个唯一的标识符(如ID),并且在编辑模板中正确使用了Html.HiddenFor来保持这个标识符。

通过以上步骤,可以在ASP.NET MVC5中有效地在同一视图中编辑父类型和其子类型的列表。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ASP.NET MVC5高级编程——(3)MVC模式的模型

新建的ASP.NET MVC5项目会自动包含对实体框架(EF)的引用。...可以把Db的Set想象成一个特殊的、可以感知数据的泛型列表,它知道如何在父上下文中加载和保存数据。...在sad path中,控制器操作需要重新创建Edit视图,以便用户更改自身产生的错误,而ASP.NET MVC5默认提供了客户端校验,如图所示: ?...复杂模型绑定:在ASP.NET MVC中,可以通过DefaultModelBinder类将form数据对应到复杂的.NET类,即模型。该模型可能是一个List类或一个含有多个属性的自定义类。...在ASP.NET MVC中可以通过使用Bind属性限制可被更新的Model属性。如绑定多个字段中的部分字段:通过Bind属性来定义Model中需要绑定哪些字段。

4.8K40

ASP.NET MVC5请求管道和生命周期

在IIS7之前,如IIS6或IIS5,请求处理管道分为两个:IIS请求处理管道和ASP.NET管道,若客户端请求静态资源则只有IIS管道进行处理,而ASP.NET管道不会处理该请求。...上图中主要描述ASP.NET运行时对HTTP请求的处理且不涉及太多细节。...在ASP.NET MVC中所有的过滤器最终都会被封装为Filter对象,该对象中FilterScope类型的属性Scope和int类型属性Order用于决定过滤器执行的先后顺序,具体规则如下: Order...,对于不是ActionResult类型的返回值,ASP.NET MVC会将其转换为ActionResult类型。...书目推荐 《ASP.NET MVC Interview Questions and Answers Book》 《ASP.NET MVC5框架揭秘》 参考文章 IIS 7.0 的 ASP.NET 应用程序生命周期概述

1.7K30
  • ASP.NET MVC5高级编程——(2)MVC模式的视图与Razor引擎

    Razor引擎和ASPX引擎(MVC5已经不支持)的区别: Razor引擎(视图文件后缀名为.cshtml): ? ASPX引擎 (视图文件后缀名为.aspx): ?...dynamic的简洁语法,又能获得强类型和编译时检查的好处(比如正确的输入属性和方法名称)。...但要注意这里需要输入模型类型的完全限定类型名(名称空间和类型名称),如下所示:1 @model IEnumerable 2 ...当创建一个包含数据条目表单的视图(如Edit视图或者Create视图)时,选择这个选项会添加对jqueryval捆绑的脚本引用。如果要实现客户端验证,那么这些库就是必须的。...这个选项是用来重写默认布局文件的。 2.2 Razor视图引擎 ASP.NET MVC中提供了两种不同的视图引擎:较新的Razor视图引擎和较早的WebForms视图引擎。

    3.7K51

    带着你的Code飞奔吧!

    http://www.cnblogs.com/dunitian/p/5474501.html 10.如何在nuget上传自己的包+搭建自己公司的NuGet服务器 http://www.cnblogs.com...MVC5系列之~~~1.基础篇---必须知道的小技能 http://www.cnblogs.com/dunitian/p/5714430.html 探索ASP.NET MVC5系列之~~~2.视图篇-...--包含XSS防御和异步分部视图的处理 http://www.cnblogs.com/dunitian/p/5722370.html 探索ASP.NET MVC5系列之~~~3.视图篇(下)---包含常用表单和暴力解猜防御...http://www.cnblogs.com/dunitian/p/5724872.html 探索ASP.NET MVC5系列之~~~4.模型篇---包含模型常用特性和过度提交防御 http://www.cnblogs.com.../dunitian/p/5741874.html 探索ASP.NET MVC5系列之~~~5.缓存篇(页面缓存+二级缓存) http://www.cnblogs.com/dunitian/p/6126820

    2.2K70

    asp.net core 3.x 身份验证-1涉及到的概念

    参考:源码、Artech、mvc5基于owin的身份验证视频、ASP.NET Core 运行原理解剖[5]:Authentication 注意:本篇只讲涉及到的几个概念 ?...登录和注销这两个步骤定义了对应的子接口。当然微软还为我们定义了抽象类,参考 ?...程序运行阶段从这个列表中取出指定方案,得到对应的处理器类型,然后创建它,最后调用这个处理器做相应处理 比如登录操作的Action中xxx.SignIn("方案名") > 通过方案名找到方案从而得到对应的处理器类型...> 创建处理器 > 调用其SignIn方法 一种特殊的情况可能多种方案使用同一个身份验证处理器类型,这个后续的集成第三方登录来说 方案、处理器、选项、三者之间的关系 简单但不准确的理解为:方案名+处理器...AuthenticationHandler ,获取的AuthenticationHandler会被缓存,这样同一个请求的后续调用直接从缓存中拿。

    2.5K30

    ASP.NET Core Middleware

    ] 传统的ASP.NET的处理管道是基于事件模型的,处理管道有多个IHttpModule和一个IHttpHandler组成。...请求处理管道中各个模块被调用的顺序取决于两方面: 模块所注册事件被触发的先后顺序 注册同一事件的不同模块执行先后顺序有Web.config中的配置顺序决定 [图片来自微软官方文档] ASP.NET Core...其次,在ASP.NET Core中只需使用代码,而无需使用Global.asax和Web.config来配置请求处理管道。...ASP.NET Core中整个请求处理管道的创建是围绕这种IApplicationBuilder接口进行的,请求处理管道是一个List类型的列表。...and modules to ASP.NET Core middleware ASP.NET MVC5请求处理管道和生命周期 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识

    61630

    Git 项目推荐 | 基于 C# 的极速 WEB + ORM 框架

    NFine项目简介 使用时请务必保留来源,请勿用于违反我国法律的web平台、如诈骗等非法平台网站。版权最终解释权归《NFine团队》所有。...NFine是一套基于ASP.NET MVC+EF6+Bootstrap开发出来的框架,源代码完全开源,可以帮助你解决C#.NET项目68%的重复工作,让开发人员远离加班!...支持SQLServer、MySQL、Oracle、SQLite、Access 等多数据库类型。模块化设计,层次结构清晰。内置一系列企业信息管理的基础功能。...数据权限(精细化数据权限控制,控制到行级,列表级,表单字段级,实现不同人看不同数据,不同人对同一个页面操作不同字段。 提高开发效率及质量。常用类封装,日志、缓存、验证、字典、文件、邮件、,Excel。...二 后端技术 核心框架:ASP.NET MVC5、WEB API。 持久层框架:EntityFramework 6.0。 定时计划任务:Quartz.Net组件。

    3.1K80

    unity3d新手入门必备教程

    如果你不能在场景视图中同时看到所有物体,你可以使用层次来选择并检视它们。    物体层次 Unity使用一个称为父化(Parenting)的概念。任何物体都可以成为另一个物体的父或子。...你将会看到一个三角显示在新的父物体的左边,现在你可以展开或折叠父以便在层次中查看他的子物体,而不会影响你的游戏。    ...一个游戏物体可以有任意多个子物体,但是只能有一个父物体。子物体也可以是其它物体的父物体。你可以很容易的在层次视图中分辨一个物体是不是一个父物体。...从技术角度来说,脚本是作为组件的一种来编译的,就像其它组件一样。    任何在脚本中申明的公有变量都将在游戏物体的检视面板中显示为可编辑或可连接。...这将从预设中拷贝所有父物体和所有的子物体。这些游戏物体被连接到(linked)预设,在工程视图中将使用蓝色的文本来显示它们。

    6.4K10

    xwiki开发者指南-一分钟创建App

    有些字段类型,如标题和内容都没有被映射到XClass属性类型,而是文档字段。视觉上一个Short Text字段和Title字段之间没有差别。所不同的是值的存储方式。...) sheet,用于显示和编辑应用程序条目(如 Holiday RequestSheet) template,当创建一个新的应用程序条目,编辑时提供默认值 (如Holiday RequestTemplate...给予应用程序创建者对应用程序主页和子页面管理权限(这样他就可以删除所有应用程序页面) 分离代码和数据优点: 通过在数据页面和其子页面设置拒绝编辑权限来对一些用户隐藏Edit application选项。...这样,你就可以精确地控制哪些用户允许编辑你的应用程序以及普通用户无法编辑你的应用程序。 能够控制哪些用户通过在数据页面和其子页面设置允许或拒绝编辑权限来控制添加新条目或编辑/删除现有条目。...相应属性类型的可编辑的元属性列表; 这些都是配置选项,你会得到这个字段类型 使用类编辑来保存和编辑这个页面。

    8.3K30

    .NET MVC简单介绍

    比如ASP.Net MVC的核心类仍然是实现了IHttpHandler接口的MVCHandler。 ASP.net WebForm、和ASP.net MVC的关系?...控制器的建立、视图的建立 :在Controllers文件夹下点右键→【添加】→【控制器】→选择【MVC5控制器-空】,类的名字以Controller结尾,比如“TestController”,会自动在Views...也可以同一个类实现,但是这样写看起来比较清晰。...,并且进行类型的转换),reutrn View(resp)就会找到Views下的和自己的“类名、方法名”相对应的Index.cshtml,然后把数据resp给到Index.cshtml去显示。...@model (要小写) WebApplication2.Models.IndexRespModel表示传递过来的数据是IndexRespModel类型的,@Model(大写开头)指向传递过来的对象。

    1.2K10

    web前端常见面试题

    DOCTYPE html> HTML 4.01 Strict(HTML 4.01 严格模式)的 DTD 包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(如font),它的文档类型声明:...视口高度 vw 和宽度 vh 两者中的最小值 vmin 视口高度 vw 和宽度 vh 两种中的最大值; % 相对于父级元素的大小来确定; 参考:CSS [1] CSS percentage...在点击子元素时,浏览器运行了两种不同的阶段:捕获阶段和冒泡阶段。...因此上面代码在点击子元素时会先执行子元素绑定的事件,然后向上冒泡,触发父元素绑定的事件。 addEventListener 函数的第三个参数是个布尔值。...,可以将事件绑定到父元素上,并让子节点上发生的事件冒泡到父节点上,利用 e.target 属性可以获取到当前触发事件的子元素。

    2.3K20

    探索ASP.NET MVC5系列之~~~2.视图篇(上)---包含XSS防御和异步分部视图的处理

    这个应用场景还是比较多的,比如同样是Article的集合,一个是显示最新文章列表,一个是显示文章列表,一个是显示编辑推荐文章列表,基本上都是这种结构,那么是不是可以把这种的...但是处理数据的时候就特别麻烦了(ViewBag是弱类型的,不能点出我们需要的属性),这时候强类型就油然而生了~~~ 扩展:动态值不能作为参数传递给扩展方法(C#编译器在编译的时候为了选择正确的扩展方法肯定是需要其真正类型的...)【你传参数用var类型的传着试试~~】 效果: ?...如果子页面没有定义Footer的节,那么就报错了 ? 其他两种写法:子页中定义了Footer就显示子页的,没有定义就显示默认 ? ?...再说下Html.RenderPartial 和 Html.RenderAction RenderPartia l咋一看和 RenderAction 差不多,但当我们把非同一控制器下的视图当分部视图的时候就有问题了

    2.2K70

    ASP.NET MVC学习笔记06编辑方法和编辑视图

    上一篇中,说到了MVC生成的Index方法,和Details方法,现在来说一下自动生成的方法和视图,应该怎么的来进行编辑。...调试,浏览,然后点击一个条目,进入编辑。 ? 如上图所示,Edit(编辑)链接是由Views\ Movies\Index.cshtml 视图中Html.ActionLink方法所生成的....当 scaffolding自动创建编辑视图时,它会查看Movie类并为 类的每个属性创建用于 Render的和的元素。...注意,视图模板在文件的顶部有 @model MvcMovie.Models.Movie的声明,这将指定视 图期望的模型类型为` Movie。...视图模板在文件的顶部有 @model MvcMovie.Models.Movie的声明,这将指定视 图期望的模型类型为 Movie。 ? 处理 POST 请求 回看前面的Eidt的Post方法。

    5K50

    ASP.NET MVC 5 - 给数据模型添加校验器

    并且确保这些验证规则在用户创建或编辑电影时被执行。 拒绝重复 DRY ASP.NET MVC 的核心设计信条之一是DRY: "不要重复自己(DRY --Don’t Repeat Yourself)"。...一个真正的好处是,你并不需要更改MoviesController类或Create.cshtml视图中的一行代码,来启用此验证的用户界面。...该枚举的DataType提供了多种数据类型,如Date, Time,  PhoneNumber, Currency, EmailAddress 和其他更多的。...(您可能不希望这样的某些字段 - 例如货币值,你可能不希望在编辑文本框中出现货币符号。) 你可以单独使用DisplayFormat属性;但和DataType属性一起,通常是一个好主意。...ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view) 9. ASP.NET MVC 5 - 给电影表和模型添加新字段 10.

    9.1K70
    领券