如何正确地将与jQuery ListView行相关的对象传递给特定的控制器方法

本文关键字:对象 方法 控制器 正确地 jQuery ListView | 更新日期: 2023-09-27 18:09:04

我有一个jQuery视图,显示一个列表的Fix对象,这一个:

<ul data-role="listview" data-inset="true" data-theme="b" data-split-icon="delete">
    @foreach (DataModel.Vulnerability.Fix item in Model.VulnerabilityFixes)
    {         
        <li><a href="@Url.Action("Details", "Product", new { Title = item.Title })">
            <h2>@item.Title</h2>
            <table style="width: 100%">
                <tr>
                    <th>Id</th>
                    <th>FixName</th>
                    <th>Vendor</th>
                    <th>Version</th>
                </tr>
                <tr>
                    <td>@MyHelper.decodeNull(item.Id)</td>
                    <td>@MyHelper.decodeNull(item.FixName)</td>
                    <td>@MyHelper.decodeNull(item.Vendor)</td>
                    <td>@MyHelper.decodeNull(item.Version)</td>
                </tr>
            </table>
        </a>
            <a href="@Url.Action("DeleteFix", "Editing", new { vulnId = Model.Id, currentFix = item })">Delete</a>
        </li>
    }
</ul>

如您所见,这个列表包含一个按钮(一个链接)来删除相关的修复,这个:

<a href="@Url.Action("DeleteFix", "Editing", new { vulnId = Model.Id, currentFix = item })">Delete</a>

当这个链接被点击时,调用EditingController类的DeleteFix()方法,它接受2个参数:

  1. vulnIdlong

  2. 点击链接行对应的Fix对象。

这是我的DeleteFix()方法

public ActionResult DeleteFix(long vulnId, DataModel.Vulnerability.Fix currentFix) 
{
    DataModel.Vulnerability.Fix model = new DataModel.Vulnerability.Fix();
    manager.openConnection();
    try
    {
        model = currentFix;
    }
    finally
    {
        manager.closeConnection();
    }
    return View(model);
}

问题是当进入方法时,vulnId参数设置正确,但currentFix参数设置为null

我错过了什么?我能做些什么来正确传递与我按下删除按钮的行相关的Fix对象?

如何正确地将与jQuery ListView行相关的对象传递给特定的控制器方法

不能在URL中传递"object"。你只能传递文本。(尽管您可以序列化对象)。您可能想要传递项目的Id。因此,链接应该是这样的:

<a href="@Url.Action("DeleteFix", "Editing", new { vulnId = Model.Id, currentFix = item.Id })">Delete</a>

你的动作应该是:

public ActionResult DeleteFix(long vulnId, int currentFix)

然后您可以使用Id来删除项目。