【问题标题】:Why does my viewmodel return only last value while post to controller?为什么我的视图模型在发布到控制器时只返回最后一个值?
【发布时间】:2020-11-13 21:57:23
【问题描述】:

我正在使用Beginform 方法将表单从视图发布到控制器,并通过隐藏字段传递 id 列表。

但它只返回列表中的最后一个值。

View.cshtml:

 @using(Html.BeginForm("makepayment","home",FormMethod.Post))
 {
     if (Model != null) 
     {
         for (var i = 0; i < Model.Count; i++) 
         {
             @Html.HiddenFor(m => Model[i].cart.vid)
         }
    }
                               
    @Html.TextBoxFor(m => m[0].payment.cname);
 
    @Html.TextBoxFor(m => m[0].payment.number);
    @Html.TextBoxFor(m => m[0].payment.securitycode);
    @Html.TextBoxFor(m =>m[0].payment.expdate);
    <input type="submit" value="pay" />
 }

它只返回最后一个值。循环不工作,因为我使用了IEnumerable,但我不知道如何解决

【问题讨论】:

  • [0]改成[i]?
  • @CodeCaster 问题出在第一个块上,@Html.HiddenFor(m => Model[i].cart.vid)
  • @Prasad Telkikar 先生,这是我问的
  • @Rashid AN 先生可以吗

标签: c# asp.net-mvc-4


【解决方案1】:

这听起来像是一个闭包问题,见Understanding Closures

试试这个:

for (var i = 0; i < Model.Count; i++) {
    var index = i;
    @Html.HiddenFor(m => Model[index].cart.vid)
}

【讨论】:

  • 感谢您的回复,但是在控制器中,我无法将此值放入数据库中,实际上我不知道该怎么做
  • public ActionResult makepayment(List c) 我的控制器和支付车是我的视图模型,如何将它添加到数据库中?正在使用存储过程吗?
  • 你指的是'index'变量值吗?如果是这样,您不需要将它添加到您的数据库或控制器中,它只是一个临时循环变量。这个问题与 何时执行 Lambda 函数(在本例中为 'm => Model[i].cart.vid' 代码行)以及它们的创建范围有关。这是另一个解释它的链接:stackoverflow.com/questions/428617/what-are-closures-in-net
猜你喜欢
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 2022-08-03
  • 1970-01-01
相关资源
最近更新 更多