ASP.NET MVC – Set Ausgewählt Wert von Cascading Drop-Down -

Arbeite ich an einer ASP.NET MVC-Anwendung und mit NHibernate.

Arbeite ich an einem cascading drop-down, und verwendet die Methode 1 in der folgenden website: link-text

Alles richtig funktioniert, ich habe nur gefragt, ob es möglich war, um die kaskadierende Dropdown-Listenfeld auf einen Wert in einer Datenbank gespeichert? Zum Beispiel würde die Liste leer sein, auf einer Seite erstellen, aber auf einer Seite Bearbeiten Sie den ausgewählten Wert eingestellt werden würde, um einen Wert in eine Datenbank.

Habe ich aktualisiert den code unten:

CascadingDropDownList.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; }
}
InformationsquelleAutor Ros | 2009-04-02
Schreibe einen Kommentar