查看母版页和PostBack

时间:2010-01-19 22:43:57

标签: asp.net-mvc model-view-controller

我的母版页上有一个下拉列表,需要在更改后进行回发。回发后,无论发起回发的页面都需要重新显示。

我的问题是我在哪里处理这个?显然我不想修改我的项目中的每个Action ...我的猜测是可能回发到其他一些固定操作并将该操作重定向回到引用者的页面。我对么?有什么想法吗?

感谢。

杰森

3 个答案:

答案 0 :(得分:1)

在Site.Master中,我最终将下拉列表以自己的形式包装回发送回专用控制器/操作。

<% Using Html.BeginForm("ChangeRole", "Home")%>
   <div id="roleSelector">Change Role: <%=Html.DropDownList("Role", DirectCast(ViewData.Item("Roles"), SelectList), New With {.onchange = "this.form.submit();"})%></div>
<% End Using%>

在控制器中,我使用以下代码更改模式,然后重定向回引用URL。

<AcceptVerbs(HttpVerbs.Post)> _
Public Function ChangeRole() As ActionResult
    Me.CurrentUser.SetRole(DirectCast([Enum].Parse(GetType(Models.ApplicationRoles), Me.Request.Item("Role")), Models.ApplicationRoles))
    Return Redirect(Request.UrlReferrer.ToString())
End Function

我不确定这是否是推荐方式,但我无法想到另一种解决方案。

答案 1 :(得分:0)

当您从下拉列表中回发时,更改您在做什么?您是否可以在jQuery调用中处理此问题,从而无需重新显示页面?

答案 2 :(得分:0)

调用操作方法可以是异步的,因为griegs说,因此,您可以从单选按钮向操作方法发布所需的任何信息,而无需重新加载页面。

如果需要更新页面的一部分,可以将其替换为渲染操作方法的内容。如果使用jQuery ajax方法,则可以将特定信息发布到方法中。

例如,像这样:

$(document).ready(function()
{
   $("#myRadioButton").change(function()
    {
       //Post to your action method, with the value of the radio button, function to call on success
        $.post('yourActionMethodUrl', $(this).val(), function()
        {
           //Update some part of the page
        });
    });
});

这是基于内存的,因此您可能需要检查语法。