表格-
@using IEnumerable<Myapplication.Models.CardModel>
@foreach(var item in Model)
{
<form method="post" action="/Upload/EditCard/?cardID=@item.cardID" enctype="multipart/form-data">
<h3>
Change Title-
</h3>
<div class="display-field">
@Html.HiddenFor(m => item.cardTitle)
@Html.TextBoxFor(cardTitle => item.cardTitle)
</div>
<img src="@item.cardFilePath" />
<input type="submit">
</form>
}
方法- [HttpPost]
public void EditCard(CardModel card, HttpPostedFileBase file) {}
在表单中,我通过此表单发送值,cardID
在表单的 url 参数中发送。
cardTitle
等其他值在 EditCard
方法中变为 null。
如何使用中继器获取此值?
但是,当数据不是IEnumerable
类型时,我可以直接通过表单发送值-
@using Myapplication.Models.CardModel
<form method="post" action="/Upload/EditCard/?cardID=@Model.cardID" enctype="multipart/form-data">
<h3>
Change Title-
</h3>
<div class="display-field">
@Html.HiddenFor(m => m.cardTitle)
@Html.TextBoxFor(m=> m.cardTitle)
</div>
<img src="@Model.cardFilePath" />
<input type="submit">
</form>
}
但在中继器值不出现在方法的情况下。 只要我更改标题的值或其他任何值,这些值就会变旧。
来自图片-
和服务器代码-
从第一张图片可以看出,表单对于列表中的一条记录是可编辑的。一旦我更改了某些内容,即 Title to --> 2nd Upload
到 2nd Uploadsssss
然后这个值在服务器端为空。我的意思是此表单不发送它的值。
注意-
但是我可以通过参数在 URL 中发送值。但是,如果我确实更改了 Title 或 aboutCard
模型值。表单一直只发送那些在呈现表单时默认出现的值。
最佳答案
与其使用 foreach
,不如使用 for
循环。要应用索引,您需要将模型转换为列表
@{ var list=Model.ToList();)
@for(var i = 1;i <= list.Count();i++)
{
<form method="post" action="/Upload/EditCard/?cardID=@list[i].cardID" enctype="multipart/form-data">
<h3>
Change Title-
</h3>
<div class="display-field">
@Html.HiddenFor(m => list[i].cardTitle)
@Html.TextBoxFor(m=> list[i].cardTitle)
</div>
<img src="@list[i].cardFilePath" />
<input type="submit">
</form>
}
更新..
我已经测试过相同但不起作用。我已经创建了解决方法,检查是否有帮助。
在 Controller 中使用 cardId 获取标题
var title=Request["[" + (model.cardTitle)+ "].cardTitle"];
可以对模型的其他属性做同样的事情。
请注意,我已经更改了 for
循环,索引现在从 1 开始
关于c# - 通过 mvc 转发器发布值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22372162/