如何使用 Razor 将部分视图视图模型项目保存在主视图视图模型中?

2024-04-17

这可能是一个棘手的问题,但就这样吧。

假设我有一个主视图,我们称之为MainView.cshtml.

Now, MainView.cshtml有一个专用的 ViewModel 称为MainViewModel.cs它保存一个变量Model.ExampleItems这是一个 IEnumerable 类ExampleItem.

现在假设我还有一个名为的部分视图_PartialView.cshtml谁的 ViewModel 只是ExampleItem.

好吧,这就是我被困住的地方。MainView.cshtml可以动态调用_PartialView.cshtml以便用户可以创建一个新的ExampleItem。如何保存每个用户创建的ExampleItem to MainViewModel的ExampleItems 的IEnumerable 吗?

这是一些示例代码

MainView.cshtml

@model Models.ViewModels.MainViewModel

@foreach (var item in Model.ExampleItems)
{
   await Html.RenderPartialAsync("_PartialView", item);
}

<button id="AddExampleItem" type="button" class="btn btn-primary">Add Example Item</button>

_PartialView.cshtml

@model Models.ExampleItem

<input asp-for="VariableOne" />
<input asp-for="VariableTwo" />
<input asp-for="VariableThree" />

我怎样才能把这个保存到原来的^^^Model.ExampleItems?


你在这里有两条前进的路。无论哪种方式,为了绑定发布的ExampleItem即,表单字段必须按以下格式命名ExampleItems[N].Property。因此,要实现这一目标,您可以这样做:

  1. Use a for循环,而不是foreach并通过HtmlFieldPrefix:

    @foreach (var i = 0; i < Model.ExampleItems; i++)
    {
       var viewData = new ViewDataDictionary(ViewData);
       viewData.TemplateInfo.HtmlFieldPrefix = "ExampleItems[" + i.ToString + "]";
       await Html.RenderPartialAsync("_PartialView", Model.ExampleItems[i]);
    }
    

    你还需要做ExampleItems a List<ExampleItem>而不是IEnumerable<ExampleItem>否则您将引发枚举两次的异常(先计数,然后 for 循环)。

  2. 创建编辑器模板ExampleItem然后利用EditorFor。只需创建一个视图~/Views/Shared/EditorTemplates/ExampleItem.cshtml,然后将部分代码放在那里。然后在您的主视图中您只需执行以下操作:

    @Html.EditorFor(m => m.ExampleItems)
    

    Razor 将智能地确定您向其传递了一个集合,并为集合中的每个项目呈现编辑器模板。另外,重要的是,它将具有集合的完整上下文,因此它将使用正确的名称前缀,以便所有内容都能在帖子上正确绑定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Razor 将部分视图视图模型项目保存在主视图视图模型中? 的相关文章

  • 在QT中以不同的时间间隔更新GUI [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道如何在QT中以不同的时间间隔更新GUI 最好的是我可以控制时间间隔 我知道 QTimer 可以在同一时间间隔更新 GUI 但我
  • ASP.NET MVC:DropDownListFor 未选择任何选项

    我用它来填充 ASP NET MVC 视图中的下拉列表 调试这个我可以看到Selected属性设置为true当它应该是的时候 但是当渲染视图时 列表中的任何选项都不
  • iTextSharp 居中对齐文档对象内的对象

    是否有一种快速而简单的方法可以将文档对象中的对象居中对齐 Without执行任何计算逻辑 即 获取页面宽度 获取内容宽度 除以二等 我在 Document 对象内的 Paragraph 对象中有一个 PdfPTable 对象 我想将段落对象
  • ASP.NET 中的网络凭据错误

    我正在尝试使用 NetworkCredential 类通过 ASP NET 访问网页 但是我不断收到以下消息的异常System Security Cryptography CryptographicException The handle
  • 如何在线程中调用带有多个参数的方法?

    我正在构建一个 C 桌面应用程序 如何在线程中调用采用多个参数的方法 我有一个名为 Send string arg1 string arg2 string arg3 的方法 我需要使用名为 SendingThread 的线程调用此方法 有人
  • 自 2012 年 6 月升级 SDK 1.7 以来,Azure 部署不断回收

    我有一个之前运行成功的部署 从那时起 我已升级到 2012 年 6 月的 SDK 当我部署时 它会不断回收 如果我通过远程桌面进入实例 我可以手动打开应用程序并且它会运行 没有黄屏死机 因此必须有一些有关部署的信息 在事件查看器中我看到错误
  • OrderBy / ThenBy 循环 - C# 中的嵌套列表

    我有一个嵌套列表 List
  • 无法从 GetProcessId(.. hWnd) (pInvoke) 中提取 processID

    我使用以下方法 DllImport kernel32 dll SetLastError true static extern int GetProcessId IntPtr hWnd 尝试获取正在运行的进程的 processId 我拥有的唯
  • C++ GetDIBits 不工作

    首先我加载图像 cool bmp 加载很好 然后我调用函数 getPixArray 但它失败了 case WM CREATE runs once on creation of window hBitmap HBITMAP LoadImage
  • 使用 Regex/C# 将 转换为

    奇怪的问题 但我不会浪费时间解释为什么我需要这样做 只是我需要这样做 我有以下内容
  • C# - 将指向 sockaddr 结构的 IntPtr 转换为 IPAddress

    从 P Invoked 本机函数中 我得到一个IntPtr http msdn microsoft com en us library system intptr aspx它指向一个sockaddr http msdn microsoft
  • HTTP 请求未经客户端身份验证方案“Ntlm”的授权 从服务器收到的身份验证标头为“NTLM”

    我知道有很多与此类似的问题 但我找不到针对这一特定问题的问题 首先有几点 I have 无控制通过我们的 Sharepoint 服务器 我无法调整任何 IIS 设置 我相信我们的IIS服务器版本是IIS 7 0 我们的 Sharepoint
  • OneDrive上传/下载到指定目录

    我正在尝试使用 Live SDK v5 6 在我的 Windows Phone 8 1 Silverlight 应用程序中包含 OneDrive 的备份 恢复 我可以读 写标准的 me skydrive 目录 但我在寻找上传 下载到指定目录
  • 理解 htonl() 和 ntohl()

    我正在尝试使用 unix 套接字来测试向本地主机发送一些 udp 数据包 据我了解 当设置 ip 地址和端口以发送数据包时 我会填写我的sockaddr in将值转换为网络字节顺序 我在 OSX 上 我很惊讶这个 printf ntohl
  • 如何从 XBAP 关闭浏览器?

    我正在完全信任地使用 XBAP 应用程序 单击按钮时 我需要关闭托管 XBAP 的浏览器 我怎样才能实现这个目标 Application Currenty ShutDown 仅关闭应用程序 使浏览器保持空白 我知道这是一个非常老的问题 但如
  • 在 C 中释放 NULL 指针是一个好习惯吗? [复制]

    这个问题在这里已经有答案了 可能的重复 ptr 为 NULL 的 free ptr 是否会损坏内存 https stackoverflow com questions 1938735 does freeptr where ptr is nu
  • Oracle 数据库,SQL 更新语句将不起作用 (OLEDB)

    我设置了一个数字主键和一个存储卡车 FINS 的字母数字字段 它只是数字和字母的随机组合 我不生成鳍片 这些鳍片将始终与卡车车队识别号相同 这是代码视图 storeTruckSplit truckSplit 1 Stores truck F
  • 画笔到画笔动画

    我设法找到了如何制作 WPF 动画 两种颜色之间的过渡 它被称为 ColorAnimation 并且效果很好 ColorAnimation animation new ColorAnimation From Colors DarkGreen
  • OpenGL 和加载/读取 AoSoA(混合 SoA)格式的数据

    假设我有以下 AoSoA 格式的简化结构来表示顶点或点 struct VertexData float px 4 position x float py 4 position y 也就是说 每个实例VertexData存储4个顶点 我见过的
  • 在 C 中实现逻辑右移

    我正在致力于仅使用按位运算符在 C 中创建逻辑右移函数 这是我所拥有的 int logical right shift int x int n int size sizeof int size of int arithmetic shift

随机推荐