0

我在 javascript 函数中使用 html 帮助器作为下拉列表,但它不起作用。我尝试过使用带有或不带有编码器等的各种语法,但它呈现为字符串而不是 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 的下拉列表,我正在获取下拉列表的所有值,而不仅仅是选定的值。请帮忙。

4

0 回答 0