问题描述
我正在 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;
}
}
结果:
我点击编辑时电影中的会话
当我不删除任何字段时
当我删除第二个字段时
解决方法
我会将您的视图代码更改为:
@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;
}