我需要一些建议和帮助。我是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求助。
答案 0 :(得分:1)
您的样本存在一些问题;然而,&#34;如何在剃刀视图上呈现字典的问题&#34;已经在这里被问到并回答:ASP.NET MVC Binding to a dictionary
此外,我假设您正在使用较新版本的ASP.NET MVC。如果您确保调用正在开发的版本,那么向前推进将是有益的。发布您的观看代码也将大大有助于获得全面的答案,以帮助您前进。
就您的其他问题而言:
您将两个集合放入ViewData以及您已实施的模型类中。这是不必要的。在这种情况下,只需将集合放入模型并将模型绑定到视图即可。
只要您在视图中将模型定义为您在此处作为示例提供的模型类,那么您唯一需要做的就是按照上面提供的链接中的说明进行操作。
请注意,您对词典的引用将在您视图的循环中为Model.stageData
和Model.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]" />
}
}