将视图返回到MVC4中的iframe时,viewbag,viewdata或tempdata不会将信息传递回整个视图。

时间:2014-06-13 16:25:11

标签: asp.net-mvc-4 iframe viewbag viewdata tempdata

我有一个视图,有一些下拉菜单,允许您选择一些调查。选中后,它会将调查加载到iframe中。将视图加载到其中工作正常,但我试图在iframe旁边显示有关此调查的统计信息(摘要)。但是因为我将视图返回到iframe,所以viewbag,viewdata或tempdata不会返回任何内容(想象它会对iframe执行任何操作),但我需要它将信息返回到整个视图。不知道该怎么做..非常感谢任何帮助。感谢

我的观点:

@using (Html.BeginForm("Survey", "Moderator", FormMethod.Post, new { target = modFrame" }))
{
<div id="jWizard" class="jWizard wizardStyle">

    <table class="moderatorPage">
        <tr>
            <td >&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>Study: @Html.DropDownList("SurveyID", Model.Surveys, new { onchange = "LoadGroups();", @class = "dropDownMain" })</td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>Group: @Html.DropDownList("GroupID", Model.UserGroups, new { onchange = "LoadUsers();", @class = "dropDownMain" })</td>

        </tr>
        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>User:  @Html.DropDownList("UserID", Model.Users, new { @class = "dropDownMain" })</td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td><input type="submit" value="Start"  /></td>

        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td><iframe id="modFrame" name="modFrame"  style="width:100%; height:1000px; border:0px"></iframe></td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>

        </tr>

        <tr>
            <td>@TempData["test"]</td>
            <td>@ViewBag.test</td>
            <td>@ViewData["test"]</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>

        </tr>
    </table>


</div>
}

在我的控制器中:

public ActionResult Survey(int SurveyID, string GroupID, string UserID)
    {
        ViewBag.UserID = UserID;

        if (SurveyID != 0)
        {



            TempData["test"] = "test1";
            ViewData["test"] = "test2";
            ViewBag.test = "test3";


            var userTypeRepo = new UserTypeRepository(new UnitOfWork());
            ViewBag.UserType = userTypeRepo.Get(user.UserTypeID).Description;
            var repo = new SurveyRepository(new UnitOfWork());
            var survey = repo.Get(SurveyID, "MasterPages,MasterPages.MasterTickets");


            return View(survey);
        }
        else
        {
            return View("Error", (object)"Survey ID is zero");
        }
    }

1 个答案:

答案 0 :(得分:0)

欢迎使用Stackoverflow!

您的iframe中的ViewBag未向您的托管页面中的ViewBag公开。实际上,您需要在托管页面中刷新页面才能重新加载自己的ViewBag

如果我是你,我会重新构建解决方案,以利用ajax服务和基于JavaScript的视图引擎(例如AngularJS)来检索动态数据;但是,如果有一些原因你必须坚持使用这种iFrame方法,那么你可能只需要在选择更改时重新加载整个页面,用相关数据填充主页的viewbag,并设置源代码同样具有ViewBag参数的iframe。

祝你好运!