2013-10-02 5 views
11

У меня есть следующие модели:ASP.NET MVC модели привязка с ListBoxFor & DropDownListFor помощниками

[Required (ErrorMessage="Server Name Required")] 
[StringLength(15, ErrorMessage = "Server Name Cannot Exceed 15 Characters")] 
public string servername { get; set; } 
[Required(ErrorMessage = "Server OS Type Required")] 
public string os { get; set; } 
public string[] applications; 

И я использовал следующий код для привязки текстового поля к имясерверу, который работает отлично:

@Html.TextBoxFor(m => Model.servername, new {@class="fixed", @id="serverName"}) 

Я использую раскрывающийся список для ОС и список для приложений, оба из которых не заполняют модель правильно при отправке.

@Html.DropDownListFor(m => m.os , new SelectList(((List<SelectListItem>)ViewData["osTypes"]),"Value","Text"), new { @class = "fixed" }) 

@Html.ListBoxFor(m => m.applications, new MultiSelectList((List<SelectListItem>)ViewData["appList"]), new {style="display:none;"}) 

Любые мысли о том, что я делаю неправильно здесь?

Update: Я не думаю, что я дал достаточно информации здесь

В контроллере ViewData [ «osTypes»] установлен в список с несколькими умолчанию значения вытащил из WebAPI:

List<string> osTypes = FastFWD_SITE.Helpers.GetJsonObj._download_serialized_json_data<List<string>>(getOsTypeUrl); 
List<SelectListItem> osTypeList = new List<SelectListItem>(); 
foreach (string osType in osTypes) 
{ 
    osTypeList.Add(new SelectListItem { Text = osType }); 
} 
ViewData["osTypes"] = osTypeList; 

ViewData [ «appList»] отправляется в пустой список следующим образом:

ViewData["appList"] = new List<SelectListItem>(); 

для списка приложений, пользователь заполняет текстовое поле и нажимает кнопку для объявления г данные в ListBox приложения:

enter image description here

Jquery добавить элемент в ListBox:

$("#addItem").click(function() { 
     var txt = $("#appName"); 
     var svc = $(txt).val(); //Its Let you know the textbox's value 
     var lst = $("#serverSpecification_applications"); 
     var ul = $("#itemList"); 
     var options = $("#serverSpecification_applications option"); 
     var iList = $("#itemList li"); 
     var alreadyExist = false; 
     $(options).each(function() { 
      if ($(this).val() == svc) { 
       alreadyExist = true; 
       txt.val(""); 
       return alreadyExist; 
      } 
     }); 
     if (!alreadyExist) { 
      $(lst).append('<option value="' + svc + '" selected=true>' + svc + '</option>'); 
      $(ul).append('<li id="' + svc + '"><label>' + svc + '<input type="checkbox" id="' + svc + '" onclick="removeItem(this.id)"/></label>') 
      txt.val(""); 
      return false; 
     }   
    }); 

У меня есть чувство, что я делаю что-то ужасно неправильно здесь, что-то полезно.

+2

Показать контроллер, только вы знаете, что вы положили в твоих глазах – meda

ответ

16

Прежде всего, для того, чтобы модельное вяжущее работало, все ваши свойства должны иметь геттеры и сеттеры.

Меняем:

public string[] applications; 

To:

public string[] applications { get; set; } 

И для того, чтобы ListBox, чтобы показать данные правильно использовать

@Html.ListBoxFor(m => m.applications, 
    new MultiSelectList((List<SelectListItem>)ViewData["appList"], "Value", "Text"), 
    new {style="display:block;"}) 
Смежные вопросы