[MVC] [Razor] Обмен данными между шаблонами редактора. - PullRequest
1 голос
/ 27 марта 2020

Немного новичок в использовании 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, в котором другой контроллер обращается к реальной модели для извлечения и сохранения данных. Эта модель является Entity Framework.

Все работает довольно хорошо, пока спецификации не изменились, и меня попросили изменить значение MySecondSubModel.AnotherThing, когда пользователь меняет MyFirstSubModel.SomeThing. В идеале, без необходимости перезагружать все, что противоречило бы цели иметь шаблоны, я думаю.

Я пытался написать вызов Ajax в MyFirstSubModel EditorTemplate, чтобы получить значение, которое мне нужно было бы поместить в MySecondSubModel EditorTemplate. Эта часть идет хорошо, но имея значение в первом EditorTemplate, я понятия не имею, как получить его во втором.

Дополнительный вопрос: как извлечь значение из, скажем, третьего EditorTemplate для использования в качестве дополнительного параметра для вызова Ajax в первом EditorTemplate для извлечения значения для второго EditorTemplate?

Я надеюсь, что в моем вопросе был какой-то смысл, возможно, я поступаю неправильно, я все еще учусь. Надеюсь, можно получить несколько полезных указателей. ТИА!

1 Ответ

0 голосов
/ 27 марта 2020

спасибо за усилия, которые вы вложили в вопрос.

Я не разбираюсь в бритве.

Однако, если вы можете использовать ajax (то есть javascript), вы можете создать функцию JS, которую ваш ajax будет вызывать в случае успеха. Эта функция обновит значение во втором шаблоне.

Использование любого веб-фреймворка не должно заставлять вас забывать, что в конечном итоге всегда есть веб-страница HTML, отображаемая браузером с включенными js скриптами.

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

Надеюсь, это поможет вам заказать процесс «хотя». Мне +1 твой вопрос, кто-то лучше может зайти и помочь тебе больше!

...