2011-04-20 59 views
1

我有一個下拉上的局部視圖列表控制和張貼下拉列表控制的狀態不能維持MVC3下拉列表控件不保持狀態,爲什麼?

下面是部分視圖CSHTML代碼的形式後:

@model MvcApplication1.Models.TestCriteriaConsolidated 


@using (Html.BeginForm("Results", "Home")) 
{ 
<div style="float:left"> 
       <div style="font-weight:bold">     
        @Html.LabelFor(m => m.testCriteria.Year) 
       </div> 
       <div style="width:110px; "> 
        @Html.DropDownListFor(m => m.testCriteria.Year, new SelectList(new[] 
        { 

         new SelectListItem{ Text="All Years", Value=" " }, 
         new SelectListItem{ Text="2010", Value="2010" }, 
         new SelectListItem{ Text="2009", Value="2009" }, 
         new SelectListItem{ Text="2008", Value="2008" }, 
         new SelectListItem{ Text="2007", Value="2007" }, 
         new SelectListItem{ Text="2006", Value="2006" } 

        }, "Value", "Text", "1"), new { @style = "width: 100px; margin-top: 5px" })   
       </div> 
      </div> 

      <div style="float:left"> 
       <div>     
        &nbsp; 
       </div> 
       <div style="width:100px; ">         
        <input type="submit" value="Results" /> 
       </div> 
      </div> 

}

這裏是我的CONTROLER代碼:

public ActionResult Index() 
    {      
     return View(); 
    } 

    public ActionResult Results() 
    { 
     string year = Request.Form["testCriteria.Year"]; 

     List<TestCriteriaResults> test = new List<TestCriteriaResults>(); 

     test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "one", Value3="three", Value4="Four" }); 
     test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3="three", Value4="four" }); 
     test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" }); 
     test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" }); 
     test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });   

     TestCriteriaConsolidated combined = new TestCriteriaConsolidated(); 
     combined.testCriteriaResults = test; 

     return PartialView(combined); 
    } 

新型改性動作方法(這仍然沒有保持狀態):

public ActionResult Results() 
    { 
     string year = Request.Form["testCriteria.Year"]; 


     List<TestCriteriaResults> test = new List<TestCriteriaResults>(); 

     test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "one", Value3="three", Value4="Four" }); 
     test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3="three", Value4="four" }); 
     test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" }); 
     test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" }); 
     test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });   

     TestCriteriaConsolidated combined = new TestCriteriaConsolidated(); 
     TestCriteria criteria = new TestCriteria() { Year = year }; 

     combined.testCriteriaResults = test; 
     combined.testCriteria = criteria; 

     return PartialView(combined); 
    } 
+0

幾個問題......是表單發回到同一頁面?如果沒有,那究竟是不是持續?看起來你並沒有將年份添加到視圖模型中。 – 2011-04-20 02:21:21

+0

我有一個ddl中具有年份的標準部分。我在從部分視圖返回結果後堅持在ddl中選擇的那一年。我希望回答這個問題?謝謝! – KeelRisk 2011-04-20 02:28:24

+0

視圖數據不會從請求持續到下一個響應。在將其傳遞給視圖之前,您需要在新模型中設置Year。這應該夠了吧。 – 2011-04-20 02:36:17

回答

1

下面的代碼創建你的下一個局部視圖,視圖模型:

TestCriteriaConsolidated combined = new TestCriteriaConsolidated(); 
combined.testCriteriaResults = test; 

您需要在此型號上設置年份:

combined.testCriteria.Year = Request.Form["testCriteria.Year"]; 
+0

那麼ViewData又會如何呢?模型聯編程序是否自動執行? – CRice 2011-04-20 02:58:43

+0

所以我添加了邏輯來填充操作方法中的combined.testCriteria.Year,並且在單擊網格中的下一頁時它仍然不保持狀態(請參閱新代碼片段) – KeelRisk 2011-04-20 03:06:16

+0

@CRice。 Whooopss ....類型:)看到更正的版本。出於某種原因,我正在考慮TempData。 :) – 2011-04-20 03:42:44

0

combined.testCriteria.Year需要獲得與您發佈

形式值設置

試試這個

[HttpPost] 
    public ActionResult Results(TestCriteriaConsolidated form) 
    { 
     List<TestCriteriaResults> test = new List<TestCriteriaResults>(); 
     test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "one", Value3 = "three", Value4 = "Four" }); 
     test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" }); 
     test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" }); 
     test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" }); 
     test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" }); 

     TestCriteria criteria = new TestCriteria() { Year = form.testCriteria.Year }; 

     TestCriteriaConsolidated combined = new TestCriteriaConsolidated 
               { 
                testCriteriaResults = test, 
                testCriteria = criteria 
               }; 
     return View(combined); 
    } 

    public ActionResult Results() 
    { 
     return View(new TestCriteriaConsolidated()); 
    } 
+0

我將如何設置值?我問的原因是因爲在點擊提交按鈕之後但在操作方法被擊中之前它必須立即發生,對嗎?謝謝! – KeelRisk 2011-04-20 02:36:02

+1

combined.testCriteria.Year = year; (在行動方法中)。否則,請在您的操作方法中使用TestCriteriaConsolidated作爲參數,模型聯編程序將爲您處理該問題。 – CRice 2011-04-20 02:57:09