将模型中的多个词典传递给视图?

时间:2018-05-16 18:42:13

标签: asp.net-mvc

我需要一些建议和帮助。我是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个字典吗?我以为我可以从控制器设置模型中的值,然后在视图中使用它...但是idk我将如何调用每个键和值。 TIA求助。

2 个答案:

答案 0 :(得分:1)

您的样本存在一些问题;然而,&#34;如何在剃刀视图上呈现字典的问题&#34;已经在这里被问到并回答:ASP.NET MVC Binding to a dictionary

此外,我假设您正在使用较新版本的ASP.NET MVC。如果您确保调用正在开发的版本,那么向前推进将是有益的。发布您的观看代码也将大大有助于获得全面的答案,以帮助您前进。

就您的其他问题而言:

您将两个集合放入ViewData以及您已实施的模型类中。这是不必要的。在这种情况下,只需将集合放入模型并将模型绑定到视图即可。

只要您在视图中将模型定义为您在此处作为示例提供的模型类,那么您唯一需要做的就是按照上面提供的链接中的说明进行操作。

请注意,您对词典的引用将在您视图的循环中为Model.stageDataModel.stepData

答案 1 :(得分:0)

谢谢Ryan Hansen。查看您提供的链接,我能够访问数据。下面是控制器和视图的代码 控制器

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]" />
    }
}