Использование помощника HTML для выпадающего списка в JavaScript не работает
Я использую помощник HTML для выпадающего списка в функции JavaScript, но он не работает. Я пытался использовать различный синтаксис с или без кодировщика и т. Д., Но он отображает как строку, а не как элемент управления HTML. На самом деле мне приходится создавать динамический выпадающий список каждый раз, когда нажимается кнопка "Добавить новую строку". Размещение кода для выпадающего списка работает нормально, но в файле javascript он отображается как простой текст.
addServer.js-Way1
function addServerRow() {
var html = '<tr>' +
'<td><input type="text" name="ServerAllNetworks.ServerPrivateNetworks[' + _totalRows + '].IPAddress" class="form-control" id="' + 'txtIpAddress' + _totalRows + '"></td>' +
'<td>@Ajax.JavaScriptStringEncode(Html.DropDownListFor(m => m.ServerPrivateNetworks, ViewData["PrivateNetwork"] as List<SelectListItem>, "Select",new { Class = "form-control", data_required = "true"}).ToHtmlString())</td>' +
'</tr>'
$(html).appendTo($("#tblServerPrivateNw"))
};
$("#btnAddPrivateServerNetwork").click(function (e) {
e.preventDefault();
_totalRows += 1;
addServerRow();
});
Я пробовал другой способ также создать выпадающий список, он работает нормально, но когда я выбираю элемент из динамически созданных выпадающих списков, я получаю нулевое значение в моем контроллере при отправке формы. Ниже приведен код
addServer.js-Way2
function addServerRow() {
var html = '<tr>' +
'<td><input type="text" name="ServerAllNetworks.ServerPrivateNetworks[' + _totalRows + '].IPAddress" class="form-control" id="' + 'txtIpAddress' + _totalRows + '"></td>' +
'<td><select class="form-control" name="ServerAllNetworks.ServerPrivateNetworks" id="' + 'drpPrivateNetwork' + _totalRows + '" /></td>' +
'<td><input type="button" class="btnremove" value="-" /></td>' +
'</tr>'
$(html).appendTo($("#tblServerPrivateNw"))
var drplist = document.getElementById('drpPrivateNetwork' + _totalRows);
for (i = 0; i < allPrivateNetworks.length; i++) {
var option = document.createElement('option');
option.text = allPrivateNetworks[i].Name;
option.value = allPrivateNetworks.Id;
drplist.add(option, 0);
}
};
$("#btnAddPrivateServerNetwork").click(function (e) {
e.preventDefault();
_totalRows += 1;
addServerRow();
});
Моя модель для этого выпадающего списка - ServerAllNetworks, а выпадающий список используется для получения PrivateNetworkId.
public class ServerAllNetworks
{
public ServerDetails server { get; set; }
public List<ServerPrivateNetworkDetails> ServerPrivateNetworks { get; set; }
}
public class ServerPrivateNetworkDetails : ServerPrivateNetwork
{
public string ServerName { get; set; }
public string PrivateNetworkName { get; set; }
}
public partial class ServerPrivateNetwork
{
public int ID { get; set; }
public int ServerID { get; set; }
public int PrivateNetworkID { get; set; }
public string IPAddress { get; set; }
}
Я могу использовать любой из двух способов, пожалуйста, предложите, какой из них лучше, а затем предложите решение проблемы, с которой столкнулись.
Мой код контроллера
[HttpPost]
public ActionResult Add(FormCollection form, int ServerTypeID)
{
GetDropDownList();
ServerAllNetworks serverAllNetworks = new ServerAllNetworks();
ServerDetails serverDetails = new ServerDetails();
serverDetails.ServerName = Request["server.ServerName"].ToString();
serverDetails.ServerTypeID = Convert.ToInt16((Request["server.ServerTypeID"]).ToString());
serverDetails.Domain = Request["server.Domain"].ToString();
serverDetails.NickName = Request["server.NickName"].ToString();
serverDetails.ServiceProviderID = Convert.ToInt32(Request["server.ServiceProviderId"]);
serverDetails.PublicIP = Request["server.PublicIP"];
serverAllNetworks.server = serverDetails;
var privateNetworkIdsList = Request["\"ServerPrivateNetworks\""];
var newprivateNetworkIdsList = Regex.Replace(privateNetworkIdsList, "[^.0-9,]", "").Split(',').ToList();
for (int i = 1; i <= newprivateNetworkIdsList.Count; i++ )
{
ServerPrivateNetworkDetails serverPrivateNetworkDetails = new ServerPrivateNetworkDetails();
serverPrivateNetworkDetails.IPAddress = Request["ServerAllNetworks.ServerPrivateNetworks.IPAddress" + i].ToString();
serverPrivateNetworkDetails.PrivateNetworkID = Convert.ToInt32(newprivateNetworkIdsList[0]);
serverAllNetworks.ServerPrivateNetworks.Add(serverPrivateNetworkDetails);
}
//if (!ValidateServer(serverAllNetworks.server, ModelState))
//{
// var result = AdminService.AddServer(serverAllNetworks);
// ViewBag.Message = result > 0 ? Message.ServerAddSuccessfully : Message.ServerAddError;
// SessionItems.ServerTypes = GetMenuItem();
// if (result > 0)
// return RedirectToAction("Dashboard", "Home");
//}
return View();
}
В настоящее время я использую way1, но поместил код в само представление. Теперь проблема, с которой я сталкиваюсь, заключается в выпадающем списке для servertypeid и serviceproviderid. Я получаю все значения выпадающего списка, а не только выбранное значение. Пожалуйста помоги.