2010-11-08 5 views
0

В основном все, что я пытаюсь сделать, это получить сообщение «Назад» к своему собственному методу post post. Я хочу, чтобы метод действия обновлял простое значение и отображал новое значение. Ниже приведены фрагменты кода. Метод после действия получает значение из текстового поля достаточно хорошо, но после обновления этого значения вид не отображается новое значение:MVC2 Проблема обновления после действия после действия

Вид:

<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; } 

Thanks,

ответ

0

В вашем методе HttpPost, после обновления модели. CurrentPageIndex и Return 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}); 
} 
+0

спасибо, но когда я попробовал это, обновленное значение не передается методу HttpGet. Так не повезло –

+0

Извините, мой плохой. Это прекрасно работает. Спасибо. –

+0

Этот код снова вызовет версию HttpGet, потому что вы используете «return RedirectToAction (...» .Если вы используете «return View (...», он не будет снова называть HttpGet. Это более обходное решение. –

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); 
} 

Это должно исправить вашу проблему.

Rick

Смежные вопросы