c# - [MVC][Razor] 编辑器模板之间交换数据
问题描述
使用 EditorTemplates 有点新意,但遇到以下问题:
我有一个多层(视图)模型,简化如下:
public class MyModel()
{
public MyFirstSubModel MyFirstSubModel { get; set; }
public MySecondSubModel MySecondSubModel { get; set; }
}
对于每个子模型,我制作了一个 EditorTemplate,如下所示:
@model MyFirstSubModel
<div>
@Html.TextBoxFor(m => m.SomeThing)
</div>
和
@model MySecondSubModel
<div>
@Html.TextBoxFor(m => m.AnotherThing)
</div>
这两个在主视图上显示为不同的选项卡,如下所示:
<div class="tab-content">
<div class="tab-pane fade">
@Html.EditorFor(m => m.MyFirstSubModel)
</div>
<div class="tab-pane fade">
@Html.EditorFor(m => m.MySecondSubModel)
</div>
</div>
控制器只不过是一个调用服务库的管道,它调用 WebAPI,其中另一个控制器与真实模型对话以获取和保存数据。该模型是实体框架模型。
一切都很好,直到规格发生变化,当用户更改 MyFirstSubModel.SomeThing 时,我被要求更改 MySecondSubModel.AnotherThing 的值。理想情况下,不必重新加载会破坏我认为拥有模板的目的的所有内容。
我试图做的是在 MyFirstSubModel EditorTemplate 中编写一个 Ajax 调用,以获取我需要放入 MySecondSubModel EditorTemplate 的值。这部分进展顺利,但在第一个 EditorTemplate 中具有价值,我不知道如何将它放入第二个。
额外的问题:如何从让我们说第三个 EditorTemplate 中检索一个值,以用作第一个 EditorTemplate 中的 Ajax 调用的附加参数,以检索第二个 EditorTemplate 的值?
我希望我的问题有任何意义,也许我正在以错误的方式解决这个问题,我仍在学习。希望能得到一些有用的指点。蒂亚!
解决方案
感谢您在问题中付出的努力。
我对剃须刀一窍不通。
但是,如果您可以使用 ajax(因此是 javascript),您可以创建一个 JS 函数,您的 ajax 将在成功时调用该函数。此函数将更新第二个模板中的值。
使用任何 Web 框架都不应该让您忘记,最终总会有一个 HTML 网页由浏览器渲染并包含 js 脚本。
document.getElementById("content").innerHTML = "ajax value answer";
希望它可以帮助您订购您的流程。我 +1 你的问题,更好的人可能会过来帮助你更多!
推荐阅读
- python - 每当使用 python 执行 shell 命令时,操作系统和子进程都会返回代码 1
- java - 将 Apache Camel 2.xx 迁移到 3.xx
- django - 我的 Django 应用程序中的 Django 代码在哪里?
- snmp - 在 Nagios 中无法获得服务监控 SNMP 的正确语法
- python - 如果数组中的值超过 int8,numpy 会做什么
- javascript - 在静态 html 页面中包含 React 组件
- android - 如何在 Navigationview 菜单中动态添加复选框?
- blazor - Blazorise/Blazor:从另一个按钮触发 FileUpload
- python - Python base64 模块:为什么使用 decodebytes() 而不是 b64decode()?
- node.js - 管道 ReadableStream 到子进程标准输入