2014-08-28 34 views
1

雖然這個問題開始與MVC4,我發現導致了更加通用的,適用於jQuery和答案可以在一般化妝下拉只讀

用於如何使一個下拉只讀尚未數據(更改值限制)可以在控制器上提交嗎?

當我在編輯模式下顯示for時,我想根據某些條件禁用特定的下拉菜單。但是在提交時,我需要控制器中的數據,以便我可以直接使用對象來使用EF進行更新。

如果我使用禁用的屬性,數據將不可用於控制器,我需要編寫很多其他代碼來獲取屬性或更新時跳過屬性。

是否有快速解決方法,可以輕鬆應用於所有屏幕?

不,我不想禁用它,並啓用提交!

+1

我不是很familliar你的應用程序,但我假設只讀下拉意味着你已經在你的代碼或分貝的地方,對嗎?那麼爲什麼你不得不依靠它被客戶提交呢? – parchment 2014-08-28 08:09:24

回答

0

試圖很少通用(不只是MVC.NET)

$.fn.extend({ 
    readonlyddl: function() { 
     if (this.is('[readonly]')) { 
      // save current value 
      var val = this.val(); 
      // remove any events that fire on change 
      this.unbind("change"); 
      //reset the value when the select change 
      this.change(function() { 
       $(this).val(val); 
      }); 
     } 
    } 
}); 

// $("#ID").readonlyddl(); 
1

我不確定它是否是最佳解決方案,聽起來像解決方法,但您可以將隱藏的輸入添加到您的表單中,其值等於從下拉列表中選定的項目(已禁用)。下拉菜單將被禁用,當提交表單時,您可以在控制器中獲得隱藏輸入的值。

+0

這很棘手......我需要在每個頁面添加大量的代碼。也有時它需要啓用,所以可能不適合我的情況。無論如何感謝您的想法。 – 2014-08-28 08:08:59

1

的代碼就顯示什麼@ntl還回答了在MVC爲殘疾下拉列表中選擇解決方法:

型號:

Public int FooId {get;set;} 

控制器:

@Html.DropDownListFor(x => x.FooId, Model.Foos, new { disabled = "disabled" }) 
@Html.HiddenFor(x => x.FooId) 

如果必須禁用使用javascript動態下拉菜單,然後只需將當前選定的下拉列表的值分配給隱藏字段禁用它。

現在隱藏字段'FooId'會爲您提供在控制器後操作中選定的下拉值。

0

我會建議不要依賴未更改的數據。數據在發送到瀏覽器並返回到服務器後不再可靠。它可以很容易地改變。

尤其是當您直接更新數據庫時。

+0

同意,但在我的情況下,會有客戶端操作,有時我需要禁用更改(與只讀文本框相同) – 2014-08-31 06:04:28