两个部分视图,包含来自不同模型的数据,但显示在同一视图中

时间:2017-05-26 22:08:59

标签: asp.net-mvc asp.net-core asp.net-core-1.1

我有一个类似于下面的表/模型结构,其中父表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")
....

3 个答案:

答案 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

https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/mvc-music-store/mvc-music-store-part-3

希望以上有助于解决问题,请让我知道您的想法或反馈

由于

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的帮助下通过@TsengPT来自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);