Powiązanie modelu ASP.NET MVC z listBoxFor i DropDownListFor Pomocnicy
Mam następujący model:
[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;
Użyłem następującego kodu, aby powiązać pole tekstowe z nazwą serwera, która działa dobrze:
@Html.TextBoxFor(m => Model.servername, new {@class="fixed", @id="serverName"})
Używam listy rozwijanej dla systemu operacyjnego i listbox dla aplikacji, z których oba nie wypełniają poprawnie modelu na wysłaniu.
@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;"})
Jakieś myśli o tym, co robię źle tutaj?
Aktualizacja: Nie sądzę, abym podał wystarczająco dużo informacji tutaj
W kontrolerze ViewData ["osTypes"] jest ustawiona na Listę z kilkoma wartościami domyślnymi pobranymi z interfejsu 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"] jest wysyłana na pustą listę w następujący sposób:
ViewData["appList"] = new List<SelectListItem>();
Dla listy aplikacji użytkownik wypełnia pole tekstowe i naciska przycisk, aby dodać dane do listy aplikacji:
Jquery, aby dodać element do listy:
$("#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;
}
});
Mam wrażenie, że robię tu coś strasznie złego, wszystko jest pomocne.