Asp.net mvc 4 将视图返回到MVC4中的iframe时,viewbag、viewdata或tempdata不会将信息传递回整体视图。

Asp.net mvc 4 将视图返回到MVC4中的iframe时,viewbag、viewdata或tempdata不会将信息传递回整体视图。,asp.net-mvc-4,iframe,viewbag,viewdata,tempdata,Asp.net Mvc 4,Iframe,Viewbag,Viewdata,Tempdata,我有一个视图,其中有一些下拉列表,允许您选择一些调查。选中此选项后,将测量加载到iframe中。将视图加载到其中效果很好,但我尝试在iframe旁边显示有关此调查的统计信息摘要。但是由于我将视图返回到iframe,viewbag、viewdata或tempdata不会向iframe返回它所做的任何操作,但我需要它将信息返回到整个视图。我不知道怎么做。。非常感谢您的帮助。谢谢 我的看法是: @using (Html.BeginForm("Survey", "Moderator", FormMeth

我有一个视图,其中有一些下拉列表,允许您选择一些调查。选中此选项后,将测量加载到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>
}

欢迎来到Stackoverflow

iframe中的ViewBag不会暴露于宿主页面中的ViewBag。事实上,您需要在托管页面中进行页面刷新,以重新加载它自己的ViewBag

如果我是你,我会重新设计解决方案,利用ajax服务和基于JavaScript的视图引擎,例如检索动态数据;但是,如果出于某种原因,您必须坚持使用这种iFrame方法,那么您可能需要在选择更改时重新加载整个页面,使用相关数据填充宿主页面的viewbag,并使用viewbag参数设置iFrame的源


祝你好运

感谢您的快速回复!我总是在这里找到答案,但从来没有发布过答案哈哈。无论如何,对于我正在做的事情,除了iframe,我不知道如何使用其他任何东西。我正在创建一个管理员视图,允许您查看用户或总体响应。我需要能够加载任何特定的调查与球员功能向后,向前,页面跳转和显示统计数据沿它的一边。我讨厌iframes,但不知道有什么更好的方法。
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");
        }
    }