使用razor在asp.net中的相同索引上的不同部分视图之间共享数据

时间:2014-04-15 16:24:17

标签: c# asp.net-mvc asp.net-mvc-4 razor

我有以下结构的剃刀视图:

enter image description here

部分视图A过滤部分视图B.部分视图B过滤部分视图C. 部分视图D正在过滤部分视图E.

部分视图C然后打开带有表单的jQuery UI对话框,在部分视图E中显示的表中输入数据。

我的问题是如何将数据从部分D发送到部分C?

视图A,B和C正在访问控制器A和视图模型X,视图D和E正在访问控制器B和视图模型Y.  当第一次加载页面时,视图A和D被同时加载,并且它们具有固定值。

部分视图A,B和C也是共享视图。

这是index.cshtml的代码:

@model WebApplication3.ViewModels.projekatViewModel
@using PagedList.Mvc;

@{
    ViewBag.Title = "Rad sa projektima";
}

<h2>Rad sa projektima</h2>
<div id="dialog-edit"></div>
<div id="mainWrap">
    <div id="mainLeft">
        <div id="pKNormativa">
            <div id="KnjigeNormativa">@Html.Partial("A", Model, null)</div>
        </div>
        <div id="pGrupe">
            <div id="GrupeRadova"> @Html.Partial("B", Model, null)</div>
        </div>
    </div>


    <div id="mainRight">
        <div id="pPozicije">
            <div id="Pozicije"> @{ Html.RenderPartial("C", Model.pozicije, null); }</div>
        </div>
    </div>
</div>

<div id="projectWrap">
    <div id="projects">
        @Html.Partial("D")
    </div>


    <div class="CSSTableGenerator" id="Projekat">
        @Html.Partial("E", Model.projekti)
    </div>

</div>

部分视图内部没有任何特殊内容,只是foreach呈现<table>来显示数据,而一个ajax.actionlink来调用控制器并在下一个视图中按顺序显示数据......

有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:2)

您可以使用HttpContext.Items在视图之间共享数据。

@{
    this.ViewContext.HttpContext.Items["Stuff"] = "some-data";
}

此数据对单个HTTP请求有效。您还可以在父视图和部分视图之间共享数据。

更多信息:

https://msdn.microsoft.com/en-us/library/system.web.httpcontext.items(v=vs.110).aspx

When can we use HttpContext.Current.Items to stores data in ASP.NET?

答案 1 :(得分:0)

很高兴看到您的视图以及如何调用这些部分,但您可以将数据/模型传递给任何部分。对于每个部分的指定模型,这会变得棘手,因此有时可以更容易地回退到可以从控制器设置的ViewData:

@{Html.RenderPartial("~/Views/Shared/partialA", ViewData["commonPartialData"]);}