Ich arbeite an einer ASP.NET MVC-Anwendung und verwende NHibernate.
Ich arbeite an einem kaskadierenden Dropdown und habe Methode 1 auf der folgenden Website verwendet: Linktext
Alles funktioniert einwandfrei, ich habe mich nur gefragt, ob es möglich ist, das kaskadierende Dropdown auf einen in einer Datenbank gespeicherten Wert zu setzen? Zum Beispiel würde die Liste auf einer Erstellungsseite leer sein, aber auf einer Bearbeitungsseite würde der ausgewählte Wert auf einen Wert in einer Datenbank gesetzt werden.
Ich habe den Code unten aktualisiert:
KaskadierendeDropDownList.js
function bindDropDownList(e, targetDropDownList, selectedValue) {
var key = this.value;
var allOptions = targetDropDownList.allOptions;
var option;
var newOption;
targetDropDownList.options.length = 0;
for (var i = 0; i < allOptions.length; i++) {
option = allOptions[i];
if (option.key == key) {
newOption = new Option(option.text, option.value,selectedValue);
targetDropDownList.options.add(newOption);
}
}
}
JavascriptExtenstions.cs
public static class JavaScriptExtensions
{
public static string CascadingDropDownList(this HtmlHelper helper, string name, string associatedDropDownList)
{
var sb = new StringBuilder();
// render select tag
sb.AppendFormat("<select name='{0}' id='{0}'></select>", name.Replace("'",""));
sb.AppendLine();
// render data array
sb.AppendLine("<script type='text/javascript'>");
var data = (CascadingSelectList)helper.ViewDataContainer.ViewData[name.Replace("'","")];
var listItems = data.GetListItems();
var colArray = new List<string>();
foreach (var item in listItems)
colArray.Add(String.Format("{{key:'{0}',value:'{1}',text:'{2}'},selected:'{3}'}", item.Key, item.Value,item.Text.Replace("'",""),item.Selected));
var jsArray = String.Join(",", colArray.ToArray());
sb.AppendFormat("$get('{0}').allOptions=[{1}];", name.Replace("'",""), jsArray);
sb.AppendLine();
sb.AppendFormat("$addHandler($get('{0}'), 'change', Function.createCallback(bindDropDownList, $get('{1}')));", associatedDropDownList, name.Replace("'",""));
sb.AppendLine();
sb.AppendLine("</script>");
return sb.ToString();
}
}
public class CascadingSelectList
{
private IEnumerable _items;
private string _dataKeyField;
private string _dataValueField;
private string _dataTextField;
private string _dataSelected;
public CascadingSelectList(IEnumerable items, string dataKeyField, string dataValueField, string dataTextField, string dataSelected)
{
_items = items;
_dataKeyField = dataKeyField;
_dataValueField = dataValueField;
_dataTextField = dataTextField.Replace("'","");
_dataSelected = dataSelected;
}
public List<CascadingListItem> GetListItems()
{
var listItems = new List<CascadingListItem>();
foreach (var item in _items)
{
var key = DataBinder.GetPropertyValue(item, _dataKeyField).ToString();
var value = DataBinder.GetPropertyValue(item, _dataValueField).ToString();
var text = DataBinder.GetPropertyValue(item, _dataTextField).ToString().Replace("'","");
var selected = DataBinder.GetPropertyValue(item, _dataSelected).ToString();
listItems.Add(new CascadingListItem(key, value, text.Replace("'",""),selected));
}
return listItems;
}
}
public class CascadingListItem
{
public CascadingListItem(string key, string value, string text, string selected)
{
this.Key = key;
this.Value = value;
this.Text = text.Replace("'","");
this.Selected = selected;
}
public string Key { get; set; }
public string Value { get; set; }
public string Text { get; set; }
public string Selected { get; set; }
}