MVC2在Post动作方法后刷新View的问题

时间:2010-11-08 00:57:35

标签: asp.net-mvc

基本上我所要做的就是将View帖子发回给它自己的post action方法。我希望action方法更新一个简单的值,然后让视图显示新值。以下是一些代码片段。 post action方法从文本框中接收到的值足够好,但在更新此值后,视图不会显示新值:

查看:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <div class="user_form" style="width: 600px; margin-top: 50px">
        <div class="user_form_header">
            Default Distribution List
        </div>        
        <% using (Html.BeginForm())
        { %>
            <div>
                <%= Html.TextBoxFor( model => model.CurrentPageIndex) %>
                <input type="submit" name="submitButton" value="Send" />
            </div>
        <% } %>
    </div>
</asp:Content>

控制器:

public ActionResult Index()
{
    DefaultDistributionListViewModel model = new DefaultDistributionListViewModel();
    model.CurrentPageIndex = 1;
    return View(model);
}

[HttpPost]
public ActionResult Index(DefaultDistributionListViewModel model, string submitButton)
{
    // repopulate the model
    model.CurrentPageIndex = model.CurrentPageIndex + 1;
    return View(model);
}

控制器:

public int CurrentPageIndex { get; set; }

谢谢,

2 个答案:

答案 0 :(得分:0)

在你的HttpPost方法中,更新了model.CurrentPageIndex并返回View之后,它会激活你重新分配它的HttpGet方法。

model.CurrentPageIndex = 1;

也许在“获取”请求中传递默认参数。

//我相信c#3设置'默认'值 //如果不是你可以使用的[Default]属性和int吗?页

public ActionResult Index(int page = 1)
{
    var model = new DefaultDistributionListViewModel {
        CurrentPageIndex = page
    };
    return View(model);
}

[HttpPost]
public ActionResult Index(DefaultDistributionListViewModel model, string submitButton)
{
    // repopulate the model
    model.CurrentPageIndex = model.CurrentPageIndex + 1;
    return RedirectToAction("Index", new {page = model.CurrentPageIndex} );
}

答案 1 :(得分:0)

听起来输出缓存正在阻碍。我会设置一个缓存配置文件并将其设置为不缓存视图。

我是这样做的。

添加到您的web.config:

  <system.web>
    <caching>
      <outputCacheSettings>
        <outputCacheProfiles>
          <add name="CacheProfile" duration="60" varyByParam="*" />
          <add name="ZeroCacheProfile" duration="0" varyByParam="*" />
        </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
  </system.web>

将属性添加到控制器:

[OutputCache(CacheProfile = "ZeroCacheProfile")]
public ActionResult Index(int page = 1) 
{ 
    var model = new DefaultDistributionListViewModel { 
        CurrentPageIndex = page 
    }; 
    return View(model); 
} 

这可以解决您的问题。

瑞克