通过mvc中继器发布值
形成-
@using IEnumerable @foreach(var item in Model) { }
方法 – [HttpPost]
public void EditCard(CardModel card, HttpPostedFileBase file) {}
在表单中,我通过此表单发送值, cardID
以表单的url参数发送。
对于其他值,例如cardTitle
在EditCard
方法中为null。
如何使用转发器获取此值?
但是当数据不是IEnumerable
类型时,我能够直接通过表单发送值 –
@using Myapplication.Models.CardModel
}
但是如果转发器的价值不是方法。 一旦我更改了标题或其他任何值,值就会变旧。
从图片 –
和服务器代码 –
从第1张图片中可以看出,Form可以从列表中编辑一个记录。 一旦我改变了标题为 – > 2nd Upload
到2nd 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++) { }
更新..
我测试过相同但不起作用。 我创建了变通方法检查是否有帮助。
在控制器中使用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(); }
以下是快速观察的结果
希望这可以帮助。