Передать несколько словарей из модели в представление? - PullRequest
0 голосов
/ 16 мая 2018

Мне нужен совет и помощь, пожалуйста. Я новичок в MVC и программировании в целом.

Модель:

 public class WorkflowStepsViewModel
{
    public Dictionary<string, string[]> stageData { get; set; }
    public Dictionary<string, List<string>> stepData { get; set; }
}

Контроллер:

public IActionResult Criteria(CriteriaViewModel model)
    {
        WorkflowStepsViewModel stepModel = new WorkflowStepsViewModel();
        if (ModelState.IsValid)
        {
            //call GetSteps class
            GetSteps steps = new GetSteps();
            var stageData = steps.GetStages(model);
            var stepData = steps.GetStep(stageData);
            stepModel.stageData = stageData;
            stepModel.stepData = stepData;
            ViewData["stepData"] = stepData;
            ViewData["stageData"] = stageData;
            return RedirectToAction("GetWorkflow", "GetWorkflow", ViewData);
        }
        else
        {
            //show error
            return View();

        }
    }

Я хочу использовать значения и ключи в обоих словарях в представлении ... но я не знаю как. Любая помощь будет отличной. Должен ли я разделить свою модель так, чтобы у каждой модели был 1 словарь? Я думал, что смогу установить значения в модели из контроллера, а затем использовать его в поле зрения ... но не знаю, как бы я назвал каждый ключ и значение. TIA за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Спасибо, Райан Хансен. Посмотрел ссылку, которую вы указали, и я смог получить доступ к данным. Ниже приведен код для контроллера и просмотра Контроллер

var svc_stageData = steps.GetStages(model);
var svc_stepData = steps.GetStep(svc_stageData);
//passing data to model
var stepModel = new WorkflowStepsViewModel
{
  stageData = svc_stageData,
  stepData = svc_stepData
};
return View(stepModel);

Просмотр (не мой настоящий код. Это просто показывает, что данные могут быть доступны.

@model WorkflowStepsViewModel

@{
    ViewData["Title"] = "Workflow";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@foreach (var stg in Model.stageData)
{
    @for (int i = 0; i < stg.Value.Length; i++)
    {
        <input type="button" name="@("stageData["+stg.Key+ "]")" value="@stg.Value[i]" />
    }
}
<h2>stepData</h2>

@foreach (var stp in Model.stepData)
{
    @for (int i = 0; i < stp.Value.Count; i++)
    {
        <h4>"@stp.Value.Count"</h4>
        <input type="button" name="@("stageData["+stp.Key+ "]")" value="@stp.Value[i]" />
    }
}
0 голосов
/ 16 мая 2018

Есть несколько проблем с вашим образцом; однако вопрос «как представить словари в бритвенном представлении» уже задавался и отвечался здесь: ASP.NET MVC Привязка к словарю

Кроме того, я предполагаю, что вы работаете с более новой версией ASP.NET MVC. Было бы полезно двигаться вперед, если вы убедитесь, что вы называете версию, с которой вы разрабатываете. Публикация кода просмотра также будет иметь большое значение для получения всеобъемлющего ответа, который поможет вам двигаться вперед.

Что касается других ваших вопросов:

Вы помещаете обе коллекции в ViewData, а также класс модели, который вы реализовали. Это не нужно. В этом случае достаточно просто поместить коллекции в модель и привязать модель к представлению.

Пока вы определили модель в своем представлении как класс модели, который вы приводите здесь в качестве примера, единственное, что вам нужно сделать, это следовать инструкциям по ссылке, которую я предоставил выше.

Имейте в виду, что ваши ссылки на словари в этом случае будут Model.stageData и Model.stepData внутри циклов в вашем представлении.

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