列表隐藏值将错误的值传递给控制器

时间:2019-04-15 16:02:49

标签: c# asp.net-mvc

我有一个列表。对于每一行,我查看按钮,并传递Id值作为隐藏值。但是,当我单击任何按钮时,它将错误的隐藏值传递给控制器​​。它始终将第一行隐藏值传递给控制器​​。

查看:

@foreach (var list in Model)
{
      <div>
       <div > @( ((int)1) + @Model.IndexOf(list)).</div>
        <div >@list.details</div>
         <div class="col-md-2 row-index">
              <button class="btn btn-link" type="submit" name="action:view" id="view">View</button>
               <input type="hidden" name="viewId" id="viewId" value="list.WId" />
           </div>
      </div>
}

控制器:

[HttpPost]
[MultipleButton(Name = "action", Argument = "view")]
public ActionResult ViewDetail(string viewId)
{
    return RedirectToAction("ViewDetails");
}

3 个答案:

答案 0 :(得分:1)

要获取所有值,您需要将控制器中的输入值类型更改为字符串数组。
我希望该解决方案可以为您提供帮助

[HttpPost]
[MultipleButton(Name = "action", Argument = "view")]
public ActionResult ViewDetail(string[] viewId)
{
    return RedirectToAction("ViewDetails");
}

如果要获取准确的值,则需要在foreach中复制表格 在这种情况下,您应该这样写:

 @foreach (var list in Model)
    {
          <div>
           <div > @( ((int)1) + @Model.IndexOf(list)).</div>
            <div >@list.details</div>
             <div class="col-md-2 row-index">
             <form ... > // complete your form attributes 
                  <button class="btn btn-link" type="submit" name="action:view" id="view">View</button>
                   <input type="hidden" name="viewId" id="viewId" value="list.WId" />
              </form>
               </div>
          </div>
    }

注意:您应该删除全局表单

答案 1 :(得分:0)

每行应该有一个表格。然后您提交该行。 否则,当您声明时,它将传递第一个值。

答案 2 :(得分:0)

您正在将每个值设置为相同的元素ID(无论如何都是无效的)和名称。提交表单时(这将有助于完全回答您的问题),这是找到与该条件匹配的第一个元素并提交。

有多种方法可以解决此问题,例如每个条目已提到的表单,但另一个首选项是将按钮修改为div并添加单击处理程序以将特定值传递给js函数,然后该js函数提交给控制器。它是您希望前端多么紧密耦合的首选。但是主要的问题是您的元素命名约定。