2012-05-29 63 views
0

我試圖實現一個非常常見的場景,但給出了可供選擇的選項列表,最後一個選擇了「其他」選項,並且選擇了該用戶用輸入字段來指定「其他」是什麼。MVC 3將模型屬性綁定到2個字段(例如其他標題)

對我來說,它是人的標題的列表:

public List<string> TitleList 
{ 
    get 
    { 
     return new List<string> { "Mr", "Mrs", "Miss", "Dr", "Other" }; 
    } 
} 

和我想要做的是這樣的:

@Html.DropDownListFor(m => m.Title, new SelectList(Model.TitleList), "Please select...") @Html.TextBoxFor(m => m.Title)

我希望模型到文本框綁定在DropDownLis中選擇「其他」時的值,並在所有其他情況下綁定到DropDownList中的選定項。

這是否可以在模型上添加額外的屬性?

回答

1

一個更好的解決方案是綁定到兩個字段,而不是從複製所選項目下拉到綁定文本框與一些聰明的javascript:

@Html.DropDownList("ddlTitle", new SelectList(Model.TitleList), "Please select") 
@Html.TextBoxFor(m => m.Title, new { maxLength = 10 }) 

的Javascript:

ToggleTitleFields = function() { 
    var title, txtTitle; 
    title = $('select#ddlTitle').val(); 
    txtTitle = $('input#Title'); 
    if (title === "Other") { 
     txtTitle.val(""); 
     txtTitle.show(); 
     return txtTitle.focus(); 
    } else { 
     txtTitle.hide(); 
     txtTitle.val(title); 
     return $('span[data-valmsg-for="Title"]').empty(); 
    } 
}; 

$(document).on("change", "select#ddlTitle", function(e) { 
    return ToggleTitleFields(); 
}); 

希望日幫助某人

0

找到客戶端解決方案:從DropDownList添加/刪除「name」屬性。這裏是我的咖啡腳本:

ToggleTitleFields =() -> 
    if $('select#Title').val() == "Other" 
     $('select#Title').removeAttr('name') 
    else 
     $('select#Title').attr('name','Title') 
0

沙皇,

誠實,這不是我不得不處理前的情景,但仍不失爲一個好。如果我面對這種困境並被允許使用javascript解決方案,那麼當其他人被選中時,我會呈現先前的「隱藏」文本框。用戶然後必須在這個texbox中輸入新的值,這在失去焦點時會填充選擇列表並被選中。然後當表單被提交時,您將擁有這個新的價值仍然是現有模型的一部分。

當然,你也可以在選擇其他的時候做類似的顯示文本框的邏輯,但是這次在httpost控制器動作上做一些邏輯來確定是否選擇了'other'項目,然後從'文本框'的值。

當然,這兩種情況都需要驗證一堆,但原則上,任何一種方法將「工作」

相關問題