我有一个列表。对于每一行,我查看按钮,并传递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");
}
答案 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函数提交给控制器。它是您希望前端多么紧密耦合的首选。但是主要的问题是您的元素命名约定。