我正在做一个项目,另一个开发人员有一些这样的代码......
<script type="text/javascript">
function submitForm() {
document.forms[0].submit();
}
</script>
@foreach (var product in Model)
{
using (Html.BeginForm("SelectProduct", "Home", new {productId = product.Id}))
{
<tr>
<td>
<a href="#" id="submit_form" onclick="submitForm();">@product.Id</a>
</td>
<td>
@product.Name
</td>
</tr>
}
}
它构建了一个包含可点击产品 ID 和产品名称的 2 列表。单击 productId 时,它会发布到主控制器上的 SelectProduct 操作
[HttpPost]
public ActionResult SelectProduct(Guid productId)
{
...
}
我喜欢这个,因为它是一个 POST 并且不会在 url\querystring 中发送 productId。(我改变了这个例子的代码,这些arnt真的productIds和id更喜欢在url中没有这个数据)
但我不喜欢这个,因为...
- 它不起作用,因为它总是发布表单 [0]
- 不知道我喜欢它如何为每个产品创建一个表格
- 它弄乱了我正在处理的jquery mobile listview,格式很奇怪。我不完全确定为什么,但认为是因为形式。
相比之下,我有一个带有锚标签的以下列表视图,并且呈现得很好。
<ul data-role="listview" data-inset="true" data-dividertheme="b">
<li><a href="@Url.Action("Index", "SomeControllerA")">Some Controller A</a> </li>
<li><a href="@Url.Action("Index", "SomeControllerB")">Some Controller B</a> </li>
<li><a href="@Url.Action("Index", "SomeControllerC")">Some Controller C</a> </li>
</ul>
所以我的问题是...
如何在不使用单独的重复表单的情况下制作具有相同功能的类似表格/产品列表(即单击 productID 并 POST 到传递 productId 但不在查询字符串中的控制器操作)?
我在想可能只是一种形式,但以某种方式正确的 productID 被传递给控制器。这样我就可以在@foreach (var product in Model)之外拥有Html.BeginForm。
我想我正在尝试做一些类似于 LinkButton 曾经在网格中做的事情。这就像我想要 ActionLinks 但我希望他们发布而不是 GET。
感谢任何帮助。
谢谢!