2011-11-25 48 views
1

我已閱讀了很多關於下拉選擇值問題的帖子(不顯示等等等等),但是我的是相反的問題。MVC3 DropDownListFor在回發操作中設置的值不會改變

我希望下拉菜單在按鈕通過控制器操作提交頁面後返回視圖後總是重置。那麼,我如何構建它的所有作品,但是是否可以每次重置下拉列表?我找不到辦法,我已經嘗試了很多方法,相信我。

筆者認爲:

@Model.PspSourceModel.PayAccount.PaymentProviderId 
<br /> 
@Html.DropDownListFor(
     x => x.PspSourceModel.PayAccount.PaymentProviderId, 
      new SelectList(Model.PspSourceModel.PaymentProviders, "Value", "Text", "-- please select --"), 
    "-- please select --" 

我的控制器:

// I've tried forcing the selected value id here - doesn't effect the dropdownlist still? 
pspVM.PspSourceModel.PayAccount.PaymentProviderId = 1; 

return (View(pspVM)); 

我的網頁上顯示:

1 (the id I set in the Action) 

dropdownlist with the id=6 or whatever value was chosen prior to submitting the form. 

從上SO的問題和答案和更廣泛的網絡我認爲下拉列表似乎與您選擇的編號綁定,但我如何覆蓋,以重置下拉選擇'請選擇'每個時間è?

在此先感謝。

+0

剛剛找到了一個方法,但打開更好的建議? //如果我清除,然後設置爲不存在的ID(-1),它會默認爲「請」 我的控制器: 'code' ModelState.Clear(); pspVM.PspSourceModel.PayAccount.PaymentProviderId = -1; return(View(pspVM)); 'code' 無論如何感謝。 – BarryFanta

回答

0

在您的回發操作中,您可以根據需要處理當前值,並在模型中設置ID並調用視圖;

[HttpPost] 
public ActionResult Index(ModelClass viewModel) 
{ 
    // Process Value 

    viewModel.PspSourceModel.PayAccount.PaymentProviderId = 6; 
    return View("Index", viewModel); 
} 

或者您可以在您的HttpGet上設置默認值,並在您的帖子中調用RedirectToAction結果。

[HttpGet] 
public ActionResult Index() 
{ 
    // Set the default values; the following is a rough example, and won't work. 
    var viewModel = new ModelClass 
    { 
    PspSourceModel.PayAccount.PaymentProviderId = 6 
    } 

    return View("Index", viewModel); 
} 

[HttpPost] 
public ActionResult Index(ModelClass viewModel) 
{ 
    // Process Value 

    return RedirectToAction("Index"); 
} 

我希望這是明確的,如果您需要進一步的幫助,請讓我知道。

馬特

+0

感謝馬特,你的HTTPost建議正是我所做的。不知怎的,在那裏設置ID並不能解決我的問題。 我無法做你的重定向解決方案,因爲我有其他的東西在那裏,邏輯,以避免它會變得凌亂。 似乎這是** ModelState **問題,根據我的初步評論。 無論如何感謝 – BarryFanta

4

根本這裏的問題是,當MVC是重新綁定在回發的形式,它不使用模式,但ModelState中,這樣你就可以改變你的模型就像你喜歡,但只有綁定的ModelState會用過的。你有沒有在ModelState上試過這些方法?

public bool Remove(string key); 
public void SetModelValue(string key, ValueProviderResult value);