通过mvc中继器发布值

形成-

@using IEnumerable @foreach(var item in Model) { 

Change Title-

@Html.HiddenFor(m => item.cardTitle) @Html.TextBoxFor(cardTitle => item.cardTitle)
}

方法 – [HttpPost]

 public void EditCard(CardModel card, HttpPostedFileBase file) {} 

在表单中,我通过此表单发送值, cardID以表单的url参数发送。

对于其他值,例如cardTitleEditCard方法中为null。

如何使用转发器获取此值?

但是当数据不是IEnumerable类型时,我能够直接通过表单发送值 –

@using Myapplication.Models.CardModel

  

Change Title-

@Html.HiddenFor(m => m.cardTitle) @Html.TextBoxFor(m=> m.cardTitle)
}

但是如果转发器的价值不是方法。 一旦我更改了标题或其他任何值,值就会变旧。

从图片 –

在此处输入图像描述

和服务器代码 –

在此处输入图像描述

从第1张图片中可以看出,Form可以从列表中编辑一个记录。 一旦我改变了标题为 – > 2nd Upload2nd Uploadsssss 2nd Upload 2nd Uploadsssss

然后,此值在服务器端为空。 我的意思是这种forms不发送它的价值。

注意-

但是我可以通过参数在URL中发送值。 但是,如果我确实改变了Title或aboutCard模型的价值。 表单只保留发送表单时默认发送的值。

而不是使用foreach for循环。 要应用索引,您需要将Model转换为List

  @{ var list=Model.ToList();) @for(var i = 1;i <= list.Count();i++) { 

Change Title-

@Html.HiddenFor(m => list[i].cardTitle) @Html.TextBoxFor(m=> list[i].cardTitle)
}

更新..

我测试过相同但不起作用。 我创建了变通方法检查是否有帮助。

在控制器中使用cardId获取标题

  var title=Request["[" + (model.cardTitle)+ "].cardTitle"]; 

对于模型的其他属性也可以做同样的事情。

请注意,我已经更改了for循环,index现在从1开始

您需要将IEnumerable更改为IList,然后您将能够通过索引正确绑定Model。

看到这个有效的工作。

查看页面

 @model IList @using (Html.BeginForm("EditCard", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) { for (int i = 0; i < Model.Count; i++) { @Html.HiddenFor(m => Model[i].CardID) @Html.TextBoxFor(cardTitle => Model[i].CardTitle)   } 
}

调节器

  [HttpPost] public void EditCard(IList cm, IEnumerable files) { string strfile = string.Empty; string cardTitle = string.Empty; if (files != null) { foreach (var file in files) //loop through to get posted file { strfile = file.FileName; } } if (cm != null) { foreach (var item in cm) //loop through to get CardModel fields { cardTitle = item.CardTitle; } } } 

我不知道这是否有助于解决您的问题。 我试过这个并且效果很好。

该模型

 public class CardFileModel { public int CardId { get; set; } public string Name { get; set; } public HttpPostedFileBase File { get; set; } } 

指数行动

 public ActionResult Index() { List cards = new List { new CardFileModel{ CardId =1 , Name="Card1" }, new CardFileModel{ CardId =2 , Name="Card2" } }; return View(cards); } 

家庭观点

 @model List @{ ViewBag.Title = "Home Page"; } 

@ViewBag.Message

@for (int i = 0; i < Model.Count; i++) { using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) {
@Html.TextBoxFor(x => x[i].CardId)
@Html.TextBoxFor(x => x[i].Name)
@Html.TextBoxFor(x => x[i].File, new { type = "file" })
} }

指数发布行动

 [HttpPost] public ActionResult Index(List card) { //Access your card file from the list. var name = card.FirstOrDefault().Name; return View(); } 

以下是快速观察的结果

快速观看快照

希望这可以帮助。