2016-03-23 10 views
0

私はドロップダウンリストを持っているフォームを持っています。これはユーザーがフォームを投稿したときに取り込み、取得することができます。私はこれを扱う別の方法があるかどうかを知りたかったので、フォームの投稿とエラーがあった場合、私が今行っているように、データを再度参照する必要はありません。MVCドロップダウンリストhttppost、検索が必要

public ActionResult Identity(int id) 
{ 
    var profile =..... 
    profile.gender = _myservice.GetGenders(); 
    return View(profile); 
} 

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Identity(int id, Profile profile) 
{ 
    if (ModelState.IsValid) 
    { 
     // save data and redirect 
     .... 
    } 
    // if error, rebuild dropdown and send back to user 
    var profile =..... 
    profile.gender = _myservice.GetGenders(); 
    return View(profile); 
} 
+1

キャッシングとテンポラリが可能です。トレードオフはここで議論されています:http://stackoverflow.com/questions/22406452/persisting-dropdown-information-when-modelstate-is-not-valid –

+0

@SteveGreene okすべてのドロップダウンが小さくても – Paritosh

答えて

0

ドロップダウンリストがすべてのユーザーで同じ場合は、アプリケーションキャッシュを使用します。それ以外の場合は、コレクションをユーザーのセッションキャッシュに格納します。いずれにしても、基本的にはメカニックは同じです。

public IList<Gender> GetGenders() 
{ 
    const string cacheKey = "MyApp_GendersKey"; 
    if (HttpContext.Current.Cache.Get(cacheKey) == null) 
    { 
     lock (HttpContext.Current.Cache) 
     { 
      HttpContext.Current.Cache.Insert(
       cacheKey, 
       _myservice.GetGenders(), 
       null, 
       DateTime.Now.AddHours(1), 
       System.Web.Caching.Cache.NoSlidingExpiration 
       ); 
     } 
    } 
    return (List<Gender>)HttpContext.Current.Cache.Get(cacheKey); 
} 
関連する問題