首页 > 解决方案 > [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 的值?

我希望我的问题有任何意义,也许我正在以错误的方式解决这个问题,我仍在学习。希望能得到一些有用的指点。蒂亚!

标签: c#htmlasp.net-mvcrazormvc-editor-templates

解决方案


感谢您在问题中付出的努力。

我对剃须刀一窍不通。

但是,如果您可以使用 ajax(因此是 javascript),您可以创建一个 JS 函数,您的 ajax 将在成功时调用该函数。此函数将更新第二个模板中的值。

使用任何 Web 框架都不应该让您忘记,最终总会有一个 HTML 网页由浏览器渲染并包含 js 脚本。

document.getElementById("content").innerHTML = "ajax value answer";

希望它可以帮助您订购您的流程。我 +1 你的问题,更好的人可能会过来帮助你更多!


推荐阅读