微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在 asp.net mvc 中传递数组值?

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

但是我在剪辑电影时遇到了问题。

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

有人知道为什么吗?

我的代码

编辑.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,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>

模型

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;
        }
}

结果:

我点击编辑时电影中的会话

enter image description here

当我不删除任何字段时

enter image description here

当我删除第二个字段时

enter image description here

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

enter image description here

解决方法

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

  @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;
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。