Как динамически добавить мастер начальной загрузки и инициализировать его, используя идентификатор, сгенерированный серверной переменной - PullRequest
1 голос
/ 28 апреля 2019

Мне трудно инициализировать мастер начальной загрузки, сгенерированный динамически при частичном просмотре. Модель частичного просмотра генерирует значение Id, которое я сохраняю в статическую переменную, и я получаю доступ к этой статической переменной в моем обратном вызове ajax done, и она не обновляет ее значение. Это значение идентификатора статической переменной является частью идентификатора мастера начальной загрузки.

Я добавил службу для частичного просмотра строки и возврата строки вместе со значением id в виде объекта json.

htmlString = await this.RenderViewToStringAsync("_BlankEmployeeAssignment", new EmployeeAssignmentViewModel(), true);

return Json(new {html = htmlString, id = SettingsHelper.RecordIndex});

or

return Json(new { html = JsonConvert.SerializeObject(htmlString, Formatting.None), id = SettingsHelper.RecordIndex });

or

return Json(new { html = JsonConvert.SerializeObject(htmlString), id = SettingsHelper.RecordIndex });

Это работает, но проблема в том, что я не могу отобразить html, поскольку он содержит экранированные символы, которые jquery.parseHtml или JSON.parse не могут проанализировать обратно в чистый html. Поэтому я использую стандартную технику следующим образом, но проблема в том, чтобы получить обновленное значение SettingsHelper.RecordIndex, даже если я использую TempData ["RecordIndex"] = Model.RecordId;

return PartialView("_BlankEmployeeAssignment", new EmployeeAssignmentViewModel());

У меня есть абстрактный класс, содержащий все общие свойства

[BindRequired]
public abstract class AssetAssignmentViewModel
{
   public string RecordId { get; set; } = Guid.NewGuid().ToString();
   .... other properties
}

Этот класс наследует от абстрактного класса и добавляет его уникальные свойства навигации

public class EmployeeAssignmentViewModel : AssetAssignmentViewModel
{
   ...other unique properties
}

Я звоню в эту конечную точку, используя ajax

[Route("[action]", Name = "BlankEmployeeAssignment"), HttpGet("AddBlankEmployeeAssignment")]
public IActionResult AddBlankEmployeeAssignment()
{
      return PartialView("_BlankEmployeeAssignment", new EmployeeAssignmentViewModel());
}

Внутри частичного представления _BlankEmployeeAssignment у меня есть следующий код, сохраняющий RecordId либо в TempData, либо в статическую переменную

@model EmployeeAssignmentViewModel

@{

    ViewData["Icon"] = "fa fa-plus-square-o";

    SettingsHelper.RecordIndex = Model.RecordId;

    TempData["RecordIndex"] = Model.RecordId;
}

Я делаю вызов Ajax здесь

function addDynamicWizard(target, url, doneCallback) {

            jQuery.ajax({
                url: url,
                method: "GET",
                dataType: "html",
                cache: false,
                success: function (html) {

                    html = jQuery(html).hide().fadeIn(1000);

                    jQuery(target).append(html);
                },
                error: ajaxErrorHander
            }).done(doneCallback);

            return false;
        }

Когда к контейнеру добавлено частичное представление, у меня есть обратный вызов функции done

function ajaxWizardDoneHandler(data)
        {
            pageSetUp();

            var id = "@TempData["RecordIndex"]";

            runBootstrapWizard('#bootstrap-wizard-' + "@SettingsHelper.RecordIndex",
                runWizardFormValidator("#assignmentForm"));
        }

И TempData, и статический SettingsHelper.RecordIndex содержат устаревшие значения, а не только что созданный RecordId, созданный при вызове AddBlankEmployeeAssignment.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...