我有一个类似于下面的表/模型结构,其中父表PT
有两个子表C1和C2,除了指向PK列的FK列之外,它们都有不同的列。我需要在每个子表的两个HTML表中显示带有数据的View
。我怎样才能做到这一点?问题在于如何从同一个动作方法传递两个模型(每个局部视图一个)。每个局部视图都有一个要显示的记录。注意:我可以在两个不同的视图中显示每个局部视图,每个视图都有自己的模型。但是如何实现上述目标?
父表PT列:PK_col,col1,col2
子表C1列:FK_col,col3,col4
子表C2列:FK_col,col5,col6
查看:
...
@Html.Partial("PartialVW_1")
...
@Html.Partial("PartialVW_2")
....
答案 0 :(得分:0)
嗨,其实非常简单,那就是
如何从同一个动作方法传递两个模型(每个局部视图一个)?
您可以使用下面的示例将模型传递到局部视图中。这可以是页面的视图模型,也可以是页面的某些部分,或自定义对象。
示例:强>
@Html.Partial("PartialName", viewModel)
在您的情况下,您的观点应该是:
主要观点:
@model PT
{
@Html.Partial("PartialVW_1",Model.C1)
@Html.Partial("PartialVW_1",Model.C2)
}
部分视图1:
@model c1
{
}
部分视图2:
@model c2
{
}
注意:如果你通过模型有正确的父子关系,那么它将根据PK和FK约束给出数据。
其他信息: [仅供参考]
如果要将不同的多个对象或复杂对象传递给视图,还可以在mvc中使用ViewModel的概念。
viewmodel的有用链接:
http://www.dotnettricks.com/learn/mvc/understanding-viewmodel-in-aspnet-mvc
希望以上有助于解决问题,请让我知道您的想法或反馈
由于
KARTHIK
答案 1 :(得分:0)
使用两个子模型创建父模型。看下面的代码我希望这对你有帮助。
public class ParentModel
{
public Int64 PK { get; set; }
public string col1 { get; set; }
public Int64 col2 { get; set; }
public string col3 { get; set; }
public List<ChildTable1> ChildTable1 { get; set; }
public List<ChildTable2> ChildTable2 { get; set; }
}
public class ChildTable1
{
public Int64 PK { get; set; }
public string col1 { get; set; }
public Int64 col2 { get; set; }
public string col3 { get; set; }
}
public class ChildTable2
{
public Int64 PK { get; set; }
public string col1 { get; set; }
public Int64 col2 { get; set; }
public string col3 { get; set; }
}
父视图
@model ParentModel
@using (Html.BeginForm("Action", "Controller"))
{
@{Html.RenderPartial("~/Views/Partial1.cshtml", new { Model = Model });}
@{Html.RenderPartial("~/Views/Partial2.cshtml", new { Model = Model });}
}
在部分视图1
@model ParentModel
<table>
<tbody>
<tr>
<th>col1</th>
<th>col2</th>
<th>col3</th>
</tr>
@foreach (var item in Model.ChildTable1)
{
<tr>
<td>@item.col1</td>
<td>@item.col2</td>
<td>@item.col3</td>
</tr>
}
</tbody>
</table>
在部分视图2上
@model ParentModel
<table>
<tbody>
<tr>
<th>col1</th>
<th>col2</th>
<th>col3</th>
</tr>
@foreach (var item in Model.ChildTable2)
{
<tr>
<td>@item.col1</td>
<td>@item.col2</td>
<td>@item.col3</td>
</tr>
}
</tbody>
</table>
答案 2 :(得分:0)
CREDIT转到:我在@StephenMuecke
的帮助下通过@Tseng
和PT
来自C1
的回复解决了问题。
首先,在控制器中我需要加载父C2
和子....
....
PT pt = _context.PT
.Include(c => c.C1) // Add these two lines to tell EF Core to load C1 and C2 as well
.Include(c => c.C2) //
.Where(c=> c.PTId== selectedId).SingleOrDefault();
....
....
,PT
,如下所示:
<强>控制器强>:
@Html.Partial("PartialVW_1", Model.C1)
然后,主视图中的模型应为@Html.Partial("PartialVW_2", Model.C2)
,然后private static void printCalendar(Year year, Locale locale) {
YearMonth[] months = new YearMonth[12];
for (int i = 0; i < months.length; i++)
months[i] = year.atMonth(i + 1);
DateTimeFormatter monthFmt = DateTimeFormatter.ofPattern("MMMM uuuu")
.withLocale(locale);
System.out.print(" * ");
for (YearMonth month : months)
System.out.printf("%-24s", monthFmt.format(month));
System.out.println();
for (int dayOfMonth = 1; dayOfMonth <= 31; dayOfMonth++) {
System.out.print(" * ");
for (YearMonth month : months) {
if (dayOfMonth <= month.lengthOfMonth()) {
LocalDate date = month.atDay(dayOfMonth);
int dayOfYear = date.getDayOfYear();
String dayOfWeek = date.getDayOfWeek()
.getDisplayName(TextStyle.SHORT_STANDALONE, locale);
System.out.printf("%-2.2s|%02d| |%-5d",
dayOfWeek, dayOfMonth, dayOfYear);
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
和printCalendar(Year.now(), Locale.GERMAN);