2012-04-07 8 views
2

MVCを使用するWebアプリケーションで作業しています。ここでは、すべてのページに1つのテキストボックスと1つの画像ボタンという3つのドロップダウンボックスがあります。したがって、どのページのユーザーであっても、3つのドロップダウンから組み合わせを選択し、テキストボックスにテキストを入力し、イメージボタンを押してデータベースで検索することができます。各リクエストのMVCドロップダウンリストpersting

私は強く型付けされた(BaseViewModel)マスター_Layoutthoughtを使用しています。その上に2つの部分的なビューを追加しました.1つはユーザー情報を表示し、もう1つはすべてのドロップダウン、テキストボックス、イマージュボタンを表示します。今、モデル私は各ドロップダウンオプション/アイテムと、各モデルのリストとして3つのプロパティと選択されたアイテムIDを保持する3つのプロパティを持つBaseViewModelの3つのモデルを持っています。そして、すべてのビューモデルの親クラスとしてこのbaseViewModelを使用して、各リクエストとレスポンスに対して強くタイされた_Layoutをfullfilできるようにすることを計画しています。 。

namespace XYZNameSpace.Models 
{ 
    public class ManageCompany 
    { 
     public long ManageCompanyID { get; set; } 

     public string ManageCompanyName { get; set; } 
    } 
} 

    namespace XYZNameSpace.Models 
{ 
    public class SuperCompany 
    { 
     public long SuperCompanyID { get; set; } 

     public string SuperCompanyName { get; set; } 
    } 
} 

    public class User 
{ 
    public long UserID { get; set; } 

    public string UserName { get; set; } 

    public string UserLoginName { get; set; } 

    public string UserLevel { get; set; } 

    public int UserLevelId { get; set; } 
} 

    namespace XYZNameSpace.Models 
{ 
    public class SearchResult 
    { 
     public string CompanyName { get; set; } 

     public string SubCompanyName { get; set; } 

     public string UserName { get; set; } 
    } 
} 

のViewModel

namespace XYZNameSpace.ViewModels 
{ 
    public class BaseViewModel : User 
    { 
     public long SelectedManageCompanyID { get; set; } 

     public List<SelectListItem> ManageCompanyList { get; set; } 

     public string SelectedManageCompanyName { get; set; } 

     public long SelectedSuperCompanyID { get; set; } 

     public List<SelectListItem> SuperCompanyList { get; set; } 

     public string SelectedSuperCompnayName { get; set; } 

     public int SelectedSearchOptionID { get; set; } 

     public List<SelectListItem> SearchOptionsList { get; set; } 

     public string SelectedSearchOptionName { get; set; } 

     public string SearchWord { get; set; } 
    } 

    public class SearchOption 
    { 
     public int SearchOptionID { get; set; } 

     public string SearchOptionName { get; set; } 
    } 
} 

    namespace XYZNameSpace.ViewModels 
{ 
    public class SearchResultsViewModel : BaseViewModel 
    { 
     public List<SearchResult> ResultsList { get; set; } 
    } 
} 

コントローラ

public class HomeController : Controller 
{ 
    // 
    // GET: /Home/ 

    public ActionResult Home() 
    { 
     BaseViewModel bVM = new BaseViewModel() 
     { 
      ManageCompanyList = (new List<ManageCompany>() { 
       new ManageCompany() 
       { 
        ManageCompanyID = 1, 
        ManageCompanyName = "MC 1" 
       }, 
            new ManageCompany() 
       { 
        ManageCompanyID = 2, 
        ManageCompanyName = "MC 2" 
       }, 
            new ManageCompany() 
       { 
        ManageCompanyID = 3, 
        ManageCompanyName = "MC 3" 
       }, 
            new ManageCompany() 
       { 
        ManageCompanyID = 4, 
        ManageCompanyName = "MC 4" 
       }, 
            new ManageCompany() 
       { 
        ManageCompanyID = 5, 
        ManageCompanyName = "MC 5" 
       } 
      }).Select(x => new SelectListItem { Value = x.ManageCompanyID.ToString(), Text = x.ManageCompanyName }).ToList(), 
      SuperCompanyList = (new List<SuperCompany>(){ 
      new SuperCompany(){ 
       SuperCompanyID=6, 
       SuperCompanyName="SC 6" 
      }, 
      new SuperCompany(){ 
       SuperCompanyID=7, 
       SuperCompanyName="SC 7" 
      }, 
      new SuperCompany(){ 
       SuperCompanyID=8, 
       SuperCompanyName="SC 8" 
      }, 
      new SuperCompany(){ 
       SuperCompanyID=9, 
       SuperCompanyName="SC 9" 
      }, 
      new SuperCompany(){ 
       SuperCompanyID=10, 
       SuperCompanyName="SC 10" 
      } 
      }).Select(y => new SelectListItem { Value = y.SuperCompanyID.ToString(), Text = y.SuperCompanyName }).ToList(), 

      SearchOptionsList = (new List<SearchOption>(){ 
      new SearchOption(){ 
       SearchOptionID=11, 
       SearchOptionName="SO 11" 
      }, 
      new SearchOption(){ 
       SearchOptionID=12, 
       SearchOptionName="SO 12" 
      }, 
      new SearchOption(){ 
       SearchOptionID=13, 
       SearchOptionName="SO 13" 
      }, 
      new SearchOption(){ 
       SearchOptionID=14, 
       SearchOptionName="SO 14" 
      }, 
      new SearchOption(){ 
       SearchOptionID=15, 
       SearchOptionName="SO 15" 
      } 
      }).Select(y => new SelectListItem { Value = y.SearchOptionID.ToString(), Text = y.SearchOptionName }).ToList() 
     }; 

     return View(bVM); 
    } 

    [HttpPost] 
    public ActionResult Search(BaseViewModel bVM) 
    { 
     SearchResultsViewModel sRVM = new SearchResultsViewModel(); 
     sRVM.ResultsList = new List<SearchResult>(){ 
      new SearchResult() 
      { 
      CompanyName = bVM.SelectedSuperCompanyID.ToString(), 
      SubCompanyName = bVM.SelectedManageCompanyID.ToString(), 
      UserName = "Duh" 
      } 
     }; 
     return View("SearchResults", sRVM); 
    } 
} 
:OK、私は:(明らかに私の要件を説明している場合ことを確認していないので、ここで

はコード すべてのモデルであります

閲覧回数/ホーム/ホームCshtml

@{ 
    ViewBag.Title = "Home"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
<div style="float: left; vertical-align: top;"> 

</div> 
<br /> 

/Home/SearchResults.cshtml

@model XYZNameSpace.ViewModels.SearchResultsViewModel 
<table width="100%"> 
    <thead> 
     <tr> 
      <td> 
       COMPANY 
      </td> 
      <td> 
       SUB COMPANY 
      </td> 
      <td> 
       USER NAME 
      </td> 
     </tr> 
    </thead> 
    <tbody> 
     @foreach (XYZNameSpace.Models.SearchResult sr in Model.ResultsList) 
     { 
      <tr> 
       <td> 
        @sr.CompanyName 
       </td> 
       <td> 
        @sr.SubCompanyName 
       </td> 
       <td> 
        @sr.UserName 
       </td> 
      </tr> 
     } 
    </tbody> 
</table> 

/Shared/SearchDDLPartialView.cshtml

@model XYZNameSpace.ViewModels.BaseViewModel 
<div> 
    <div style="float: left"> 
     <span class="Label">Search: </span> 
     @using (Html.BeginForm("Search", "Home", FormMethod.Post)) 
     { 
      @Html.DropDownListFor(x => x.SelectedSuperCompanyID, Model.SuperCompanyList) 
      @Html.DropDownListFor(x => x.SelectedManageCompanyID, Model.ManageCompanyList) 
      @Html.DropDownListFor(x => x.SelectedSearchOptionID, Model.SearchOptionsList) 
      <input type="image" src="../../Content/images/search.gif" /> 

     } 
    </div> 
</div> 

/Shared/_Layout.cshtml

@model XYZNameSpace.ViewModels.BaseViewModel 
<!DOCTYPE html> 
<html> 
<head> 
    <title>@ViewBag.Title</title> 
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
    <link href="@Url.Content("~/Content/BEClientProfile.css")" rel="Stylesheet" type="text/css" /> 
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
</head> 
<body> 
    <table> 
     <tr> 
      <td> 
       <img src="../../Content/images/logo124.gif" alt="Logo" /> 
      </td> 
      <td valign="top"> 
       <div style="float: left; vertical-align: top; text-align: left"> 
        <img src="../../Content/images/user-info.gif" alt="User Infor" /> 
        <span class="Label">Welcome </span><span class="HeaderLabelText">@Model.UserLevel</span> 
       </div> 
       <div> 
        <div style="float: left; width: 100%;"> 
         <u><span class="Label">Currently Editing:</span> </u> 
        </div> 
        <div style="float: left; width: 100%;"> 
         <span class="Label">Company:</span> <span class="HeaderLabelText">@Model.SelectedManageCompanyID</span> 
        </div> 
        <div style="float: left; width: 100%;"> 
         <span class="Label">User:</span> <span class="HeaderLabelText">@Model.UserLoginName</span> 
        </div> 
       </div> 
      </td> 
      <td> 
      </td> 
      <td> 
       @{Html.RenderPartial("SearchDDLPartialViews", Model);} 
      </td> 
     </tr> 
     <tr> 
      <td colspan="4"> 
       @RenderBody() 
      </td> 
     </tr> 
    </table> 
</body> 
</html> 

/共有/ UserPartialView。 cshtml

@model XYZNameSpace.Models.User 
<div style="float: left; margin-left: .5em;"> 
    <img src="../../Content/images/user-info.gif" alt="User Infor" /> 
    <span style="font-weight: bold; float: left;">Welcome </span> 
</div> 

OK、各ドロップダウンから1つのアイテムを選択できましたが、ホームコントロール内の検索アクションで画像ボタンをクリックすると、BaseViewModelにselectedIDs以外の何も表示されないため、アクションがSearchResultsビューを表示しようとしたとき、それらの_Layout.cshtmlは、ドロップダウンリストで使用されるリストに何もないというエラーを表示します。

どのように私たちは毎回この情報を保持しますか?

答えて

1

リストア< SelectListItem>またはviewmodel自体をセッション中に保存し、viewmodelを返すたびにそれらをビューに再導入するのが簡単です。ただし、クラウドベースのソリューションでは同じ概念ですが、PaaSで許可されているappfabric、memcache、その他のアドオンなどの他のキャッシングストレージを使用する必要があります。

+0

クールこれは私のために働いた、私はこれを行うためのいくつかの非常に簡単な方法がありますしたいと思います。 ASP.NETでは、ドロップダウンコントロールに値とテキストを提供するだけですべてのことが気になりました。 – siri

関連する問題