如何在asp.netmvc中传递数组值?

How to pass array values ​in asp.net mvc?

我正在 ASP.NET MVC 中开发一个管理页面。

但是我剪辑的时候遇到了问题

当我编辑电影时,会话会出现在我的页面上。我可以删除它们。 如果我在不删除任何内容的情况下单击编辑,我会很好地获取值。但是当我删除第一个会话时,我的数组为空。 当我删除第二个会话时,数组带有这个值。

有人知道为什么吗?

我的代码:

Edit.cshtml

@using (Html.BeginForm("Edit", "Trans", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()

<div class="form-horizontal">
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    @Html.HiddenFor(model => model.ID, htmlAttributes: new { @id = "id" })
    @Html.HiddenFor(model => model.Selected, htmlAttributes: new {  })

    <div class="form-group">
        @Html.LabelFor(model => model.Titulo, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Titulo, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Titulo, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.Descricao, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextAreaFor(model => model.Descricao, new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.Descricao, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.Selected, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownListFor(model => model.Selected, new SelectList(Model.tipos, "ID", "Tipo", Model.Selected), htmlAttributes: new { @id = "ddldropdown", @class = "form-control", @disabled = "disabled" })
            @Html.ValidationMessageFor(model => model.Selected, "", new { @class = "text-danger" })
        </div>
    </div>

    <div id="partialDiv">

    </div>

    <div id="CinemaDiv" style="display:none">
        @Html.Partial("Edit_Cinema", Model)
    </div>


    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Edit" id="Save" class="btn btn-default" onclick="Fillarrays()" />
        </div>
    </div>


</div>
}


@section Scripts {

    <script type="text/javascript">
        //Script para adicionar os Views da pasta Outros no div "partialDiv"
        $(document).ready(function () {
            var txt = $("#ddldropdown option:selected").text();
            var id = $("#id").val();

                    $.ajax({
                        type: 'get',
                        url: '/Outros/Edit_Cinema' + '/' + id,
                        dataType: 'html',
                        success: function (html) {
                            $('#partialDiv').html(html);
                        }
                    });
    </script>


    @*< !--Script Cinema (Partial View)-- >*@
    <script type="text/javascript">
           
            //funcao para remover o campo sessao
            function rmSessao(id) {
                $('#sessao_' + id + '').remove();
            }
    </script>


    <script type="text/javascript">
        $('#Save').click(function () {
            var form = $("#formH");
            var url = form.attr("action");
            var formData = form.serialize();
            $.post(url, formData, function (data) {
                $("#msg").html(data);

                //Script para adicionar os campos das partial views

                var txt = $("#ddldropdown option:selected").text();
                var frm = $("form");
                var data = new FormData($("form")[0]);

                    $.ajax({
                        url: '/Outros/Edit_Cinema' + '/' + id,
                        type: "POST",
                        processData: false,
                        data: data,
                        dataType: 'html',
                        contentType: false,
                    });
     }
    </script>
}

Edit_Cinema.cshtml

@model ProjetoFinal.Models.ItemViewModel

<div class="form-horizontal">
        @*@Html.ValidationSummary(true, "", new { @class = "text-danger" })*@
        @Html.HiddenFor(model => model.Cinema.ID)


        @Html.LabelFor(model => model.Cinema.Sessoes, htmlAttributes: new { @class = "control-label col-md-2" })

    <div class="form-group">
        @for (int i = 0; i < Model.Cinema_array_Sessoes_Edit.Count; i++)
        {
            <div class="col-md-10" style="margin-left:195px;margin-bottom:10px" id="sessao_@i">
                <div class="input-group">
                    <span class="input-group-btn">
                        @Html.EditorFor(model => Model.Cinema_array_Sessoes_Edit[i], new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(model => Model.Cinema_array_Sessoes_Edit[i], "", new { @class = "text-danger" })
                        <input type="button" class="btn btn-primary" id="com" value="-" onclick="rmSessao(@i)" />
                    </span>
                </div>
            </div>
        }

    </div>

</div>

Models

ItemViewModel

public class ItemViewModel
{
    public int ID { get; set; }

    [Display(Name = "Tipo", ResourceType = typeof(Resource))]
    //public List<Tipo> tipos { get { return Services.GetTypes(); } } get all types
    public List<Tipo> tipos { get; set; }

    [Display(Name = "Tipo", ResourceType = typeof(Resource))]
    public int? Selected { get; set; }

    #region Cinema
    public Cinema Cinema { get; set; }
    public string[] Cinema_array_sessoes { get; set; }
    [Display(Name = "Cinema_array_Sessoes_Edit")]
    public List<DateTime?> Cinema_array_Sessoes_Edit { get; set; }
    public string[] array_Sessoes_Edit { get; set; }
    public string[] array_sessoes { get; set; }
    #endregion


    public ItemViewModel()
    {
        tipos = new List<Tipo>();
        
        Cinema = new Cinema();

        #region For the cinema
        Cinema_array_Sessoes_Edit = new List<DateTime?>();
        #endregion

        //vai buscar os tipos para aparecer no dropdown
        tipos = Services.GetTypes();
    }

    public class TransmontanosDBContext : DbContext
    {
        public DbSet<Item> Transmontanos { get; set; }
    }
}

TransController.cs

 public class TransController : Controller
{   
    [HttpPost]
        public ActionResult Edit(ItemViewModel item, string Latitude, string Longitude)
        {
            Item obj = new Item();
            if (item.Titulo != null)
            {
                obj.ID=item.ID;
                obj.Titulo = item.Titulo;
                obj.Descricao = item.Descricao;
                obj.Localidade = item.Localidade;
                obj.Endereco = item.Endereco;
                obj.Latitude =Latitude;
                obj.Longitude = Longitude;
                obj.Selected = item.Selected;

                if (item.Main_Image != null)
                {
                    if (item.Main_Image.ContentLength != 0)
                    {
                        //Adiciona a imagem principal à pasta Images
                        var pathMain = Path.Combine(Server.MapPath("~/Images/"), obj.ID + ".jpg");
                        item.Main_Image.SaveAs(pathMain);

                        //Adiciona a imagem principal no ultimo item inserido
                        Services.AddImage_ToItem(obj.ID);
                    }
                }

                Services.EditObject(obj);

                return RedirectToAction("Index", "Trans");
            }

            return View(item);

        }
}

OutrosController.cs

 public class OutrosController : Controller
 {
        [HttpPost]
        public ActionResult Edit_Cinema(ItemViewModel item)
        {
            Cinema cinema = new Cinema();
            cinema = item.Cinema;
        }
}

Results:

单击编辑时我的电影中的会话数

当我不删除任何字段时

当我删除第二个字段时

当我删除第一个字段时(问题

我会将您的视图代码更改为:

  @for (int i = 0; i < Model.Cinema_array_Sessoes_Edit.Count; i++)
        {
            <div class="col-md-10" style="margin-left:195px;margin-bottom:10px" id="sessao_@i">
                <div class="input-group">
                    <span class="input-group-btn">
                        @Html.EditorFor(model => Model.Cinema_array_Sessoes_Edit[i], new { htmlAttributes = new { @class = "form-control" @id="id_@i" } })
                        @Html.ValidationMessageFor(model => Model.Cinema_array_Sessoes_Edit[i], "", new { @class = "text-danger" })
                        <input type="button" class="btn btn-primary" id="com" value="-" onclick="rmSessao(@i)" />
                    </span>
                </div>
            </div>
        }

更改您的删除 javascript 功能:

/funcao para remover o campo sessao
            function rmSessao(id) {
                $('#id_' + id + '').val(null); //assingn null to date value
                 $('#sessao_' + id + '').addClass("d-none"); // just hide it
            }

并更改您的控制器操作:

 public ActionResult Edit_Cinema(ItemViewModel item)
        {
              
           item.Cinema_array_Sessoes_Edit.RemoveAll(x => x== null);

.... //your code
// you don't need it at all - Cinema cinema = new Cinema();
            var cinema = item.Cinema;
        }