mvc + razor试图渲染模型的一部分

时间:2013-06-11 08:11:03

标签: asp.net-mvc razor model viewdata

我试图通过一个模型渲染两个表。我正在使用我的助手dll来创建表格。 问题是,在第一次调用页面时,我不知道如何只渲染部分viewdata。 这是一些代码:

控制器:(创建两个表和视图数据,返回视图,使用模型viewdata)

public class Controller1 : Controller {      
//some code
public ActionResult Steuertabellen()
    {
    table = table_fill();
    table= Tabelle.tabelleGenerieren(
    table,
    new Dictionary<string, SortierRichtung>(),
    new List<string>(),
    new List<string>()               
    );


    table2 = table_fill();
    table2 = Tabelle.tabelleGenerieren(
    table2,
    new Dictionary<string, SortierRichtung>(),
    new List<string>()               
    );


    VD_Planung_Prognosen viewdata = new VD_Planung_Prognosen();
    viewdata.table= table;
    viewdata.table2= table2;

    return view(viewdata);
}

查看:

@model namespace.Models.VD_Planung_Prognosen
@using namespace.Models;

<div class="tabelle_partialview" id="tabelle_partialview_@(tabellen2ID)">@{Html.RenderPartial("PV_table2", Model);}</div>
<div id="optionen_tabelle">
    <div id="optionen_rechts">
        <button class="btn_speichern btn_speichern_@(tabellenID)" id="btn_speichern">Speichern</button>
        <button class="btn_abbrechen btn_abbrechen_@(tabellenID)" id="btn_abbrechen_@(tabellenID)">Abbrechen</button>
    </div>
</div>
<div class="tabelle_partialview" id="tabelle_partialview_@(tabellenID)">@{Html.RenderPartial("PV_table", Model);}

PartialViews(已编辑):

@model namespace.Models.VD_Planung_Prognosen
@using HelperLib_Html.Tabelle.v1_02;

@{
@Html.createTabelle(Model.tabel1)
}
//<some style>

修改 我添加了模型(sry我应该在之前做过)

型号:

public class VD_Planung_Prognosen
  {
    public Matrix matrix  { get; set; }
    public Tabelle table1{ get; set; }
    public Tabelle table2{ get; set; }
    public List<stored_procedure1> years{ get; set;     }
    public List<stored_procedure2> groups{ get; set; }
    public List<stored_procedure3> cost{ get; set; }
    public List<stored_procedure4> costs2{ get; set; }
    public List<stored_procedure5> data{ get; set; }
    public int year{ get; set; }
    public string grp{ get; set; }
    public bool pflegeSteuertabellen { get; set; }
}

所以这不会起作用,因为上面的actionlink中显示的数据显示在一个模型中,两个表将相互跟随,而renderpartial显示一个,然后按钮然后是第二个。如何使用模型以便只能处理一个表?

我希望我的问题是可以理解的,解释似乎很复杂;)

提前致谢

丹尼尔

Edit1:当然PV也是在控制器中创建的,非常类似于ActionLink视图

1 个答案:

答案 0 :(得分:1)

我不确定您的问题是什么,但是您是否尝试将RenderPartial调用更改为

@{Html.RenderPartial("PV_table2", Model.table2);}

@{Html.RenderPartial("PV_table", Model.table);}

渲染部分视图时,为视图提供在其顶部的局部视图中指定的自己的模型类型的实例:

@model SomeNamespace.SomeModelType

在此处显示的视图中,变量Model引用您的控制器变量“viewdata”,而您的partials应该期望与您的成员viewdata.table和viewdata.table2具有相同类型的变量。

附注:您可能没有将模型命名为“viewdata”,因为ViewData是视图的主要数据字典,它实际上包含您传递的模型,因此有点令人困惑。

修改: 这应该工作,这是你必须做的。您的部分视图必须接受表类型(我们将其命名为TableModel)作为它们自己的模型类型,而不是VD_Planung_Prognosen。

  • 在您的部分内容中,将@model namespace.Models.VD_Planung_Prognosen更改为@model namespace.Models.TableModel

  • 在您的部分中,“模型”一词将指代部分的模型,而不是主视图的模型。所以你的观点应该是这样的:

    @model namespace.Models.TableModel

    @using HelperLib_Html.Tabelle.v1_02;

    @ {     @ Html.createTabelle(型号) } //

  • 最后在主视图中,将您的renderpartials更改为

    @ {Html.RenderPartial(“PV_table”,Model.table);}

@{Html.RenderPartial("PV_table2", Model.table2);}