使用MVC3,如何在用户单击HTML时设置TempData值.ActionLink控制

本文关键字:设置 TempData 控制 ActionLink HTML 单击 MVC3 用户 使用 | 更新日期: 2023-09-27 18:08:53

我有一个foreach循环,它为BusinessList视图中Business对象数组中的每个项目生成一个表行。

这是我的业务对象:

    public class Business
    {
        public long BusinessID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }

这是Razor foreach循环:

@foreach (var item in Model)
{
    <tr>
        <td>
            <div class="editor">
                <div class="editor-label">
                    @Html.DisplayFor(modelItem => item.Name)
                </div>
            </div>
        </td>
        <td>
            <div class="editor">
                <div class="editor-label">
                    @Html.DisplayFor(modelItem => item.Description)
                </div>
            </div>
        </td>
        <td>
            @Html.ActionLink("Edit", "EditBusiness")
        </td>
    </tr>
}

我想做的是捕获与用户单击"Edit"按钮所在行的关联的businessessid。businessessid值需要对EditBusiness视图可用。我宁愿不使用查询字符串。是否有一些方法来设置ViewData, TempData,或ViewBag值当用户点击"编辑"链接?

使用MVC3,如何在用户单击HTML时设置TempData值.ActionLink控制

与其将值作为查询字符串传递,不如将编辑链接更改为带有ID隐藏字段和提交按钮(样式类似于编辑链接)的表单

@using (Html.BeginForm("EditBusiness")) {
    @Html.HiddenFor(m => m.Id)
    <input type="submit" value="Edit" />
}

没有办法在客户端(浏览器)设置ViewData, TempData或ViewBag值,因为它们是ASP的属性。. NET MVC视图对象在服务器端。对于您需要的,您可以像这样使用ActionLink方法:

@Html.ActionLink("Edit", "EditBusiness", new { Model.BusinessID })
这样,您将调用动作http://<your_host>/Edit/EditBusiness/<BusinessId>

修改您的"EditBusiness"操作方法以接受businessessid参数

public ActionResult EditBusiness(string BusinessID )

并将actionlink更改为this

@Html.ActionLink("Edit", "EditBusiness", new { BusinessID = Model.BusinessID })

首先你应该创建一个这样的Action:

public ActionResult Edit(int id) {
    //....
  return View();
}

然后,在View(。CSHTML文件)添加以下内容:

@Html.ActionLink("Edit", "Business", new { id = Model.BusinessID })

确保方法参数名称(Edit(int id))与"id = Model "相同。