如何从ASP.NET MVC中的PartialView更新_Layout的值' Razor'?

时间:2014-07-01 02:32:54

标签: asp.net asp.net-mvc asp.net-mvc-4 razor asp.net-mvc-5

我一直在寻找解决方案,但我还没有找到解决问题的方法。所以我希望你能给我一些线索来实现这一目标。

基本上我需要从渲染的PartialView中更改_Layout的值。我使用webforms .aspx母版页和FindControl方法来做到这一点,但我找不到在MVC Razor 引擎中执行此操作的解决方案。

我的布局页面有一个ActionLink和一个div标记占位符来显示部分视图,现在我需要知道如何从DIV标记中的部分视图页面更改Text1的值:

JavaScript是我能做到这一点的唯一方法吗?

<input id="Text1" type="text" />
<div>
   @Ajax.ActionLink("Personal Info", "Personal", "Portal", new { area = "Resume" },
        new AjaxOptions { UpdateTargetId = "result", HttpMethod = "Post", 
                          InsertionMode = InsertionMode.Replace, 
                          OnBegin = "blockUi", 
                          OnSuccess = "onTabChanged(this, 'Personal Information')" 
                        }, 
        new { @class = "text-strong" })
</div>
<div id="result">@RenderBody()</div>

提前感谢您的贡献。

3 个答案:

答案 0 :(得分:0)

我认为Javascript就是这样处理的方式。

您可能可以使用控制器和ViewBag做一些技巧(就像在默认的MVC项目中使用ViewBag设置页面标题一样)。

您也可以将其设置为某个全局变量或其他内容,并使您的部分视图更改该变量。

这两种解决方案都需要重新加载页面。

但是使用javascript可能是最好的,你可以在onTabChanged函数中完成。

<script>
    function onTabChanged(param1, param2) {
        var el = document.getElementById("Text1");
        el.value = "Whatever you want here";
    }
</script>

答案 1 :(得分:0)

我认为最简单的方法是使用您在控制器/视图/局部视图中使用的ViewBag。

答案 2 :(得分:0)

在WebForms中,您可以使用FindControl方法,因为发布了PostBack。所以整个页面再次呈现。

在您发布的示例中,我假设Ajax.ActionLink发出的更新div结果的请求返回一个可能使用相同布局的视图,但是在另一个上下文中,因此您无法访问来自呈现页面的相同输入文本,其中触发了Ajax.Action链接。

所以,如果你有多个更新<div id="result">的Ajax.ActionLink,你需要在onTabChanged上处理成功方法,就像@Kyle Gobel建议的那样。