2011-08-08 32 views

答えて

0

選択したアイテムが投稿の一部であると仮定すると、コントローラーは現在そのアイテムが何であるか知っています。どの項目を選択すべきかを示すViewDataディクショナリ内のエントリを持つだけです(取得時にはnull、選択されていない場合はnull)。ビューで値を確認し、ヌルでない場合は適切なオプションを選択します。

1

MVCはViewStateを使用しません。つまり、値の永続性を自分で管理する必要があります。通常、これはモデルを通じて行われます。あなたが( - 検証に失敗した、おそらく間違った)データとバックビューにモデルを渡すとき、

public class MyController : Controller 
{ 
    public ActionResult Something() 
    { 
     return View(new MyViewModel()); 
    } 

    public ActionResult Something(MyViewModel model) 
    { 
     if (!ModelState.IsValid) 
      return View(model); 

     return RedirectToAction("Index"); 
    } 
} 

public class MyViewModel { } 

そして、あなたのコントローラ:だから、あなたはビューモデル、例えばを持っていることを考えるとあなたはDropDownListForメソッドを使用するときに、ちょうど値を渡す:

@Model.DropDownListFor(m => m.Whatever, new SelectList(...)) 

...など

MVCのモデルバインディングは、モデルへのデータの読み込みを処理します。同じ値を再度表示するには、ビューに戻す必要があります。

[HttpPost] 
    public ActionResult Create(FormCollection collection) 
    { if (TryUpdateModel(yourmodel)) 
      { //your logic 
       return RedirectToAction("Index"); 
      } 
      int selectedvalue = Convert.ToInt32(collection["selectedValue"]); 
      ViewData["dropdownlist"] = new SelectList(getAllEvents.ToList(), "EventID", "Name", selectedvalue);// your dropdownlist 
      return View(); 
    } 

とビューで:

2

はこのような何かであっても容易に

<%: Html.DropDownListFor(model => model.ProductID, (SelectList)ViewData["dropdownlist"])%> 
2

を、あなたのActionResultの入力パラメータであなたのドロップダウンの名前(複数可)を含めることができます。あなたのドロップダウンはフォームタグでなければなりません。 ActionResultがポストされると、ASP.Netはクエリーストリング、フォーム値、およびCookieを反復します。ドロップダウン名を含める限り、選択した値は保持されます。

ここでは、ActionResultに投稿する3つのドロップダウンがあるフォームがあります。ドロップダウン名は、大文字と小文字は区別されません:ReportName、Year、およびMonthです。

//MAKE SURE TO ACCEPT THE VALUES FOR REPORTNAME, YEAR, AND MONTH SO THAT THEY PERSIST IN THE DROPDOWNS EVEN AFTER POST!!!! 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult ReportSelection(string reportName, string year, string month) 
    { 
     PopulateFilterDrowdowns(); 
     return View("NameOfMyView"); 
    } 
0

HttpRequestBaseオブジェクトを使用してください。ビューで が、これは動作するはずです:

@Html.DropDownList("mydropdown", ViewBag.Itens as IEnumerable<SelectListItem>, new { value = Request["mydropdown"] }) 
0

あなたは、コントローラのアクションメソッド内のリストデータソースのドロップダウンを構築している場合は、あなたが選択した値を送信することができ、それ

コントローラー:

public ActionResult Index(int serviceid=0) 
      { 


      // build the drop down list data source 
       List<Service> services = db.Service.ToList(); 
       services.Insert(0, new Service() { ServiceID = 0, ServiceName = "All" }); 
       // serviceid is the selected value you want to maintain 
       ViewBag.ServicesList = new SelectList(services, "ServiceID", "ServiceName",serviceid); 

       if (serviceid == 0) 
       { 
        //do something 
       } 
       else 
       { 
        // do another thing 

       } 
       return View(); 
      } 

表示:

//ServiceList is coming from ViewBag 
@Html.DropDownList("ServicesList", null, htmlAttributes: new { @class = "form-control" }) 
関連する問題