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

时间:2011-09-16 14:57:02

标签: c# .net asp.net-mvc-3 razor

我有一个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>
}

我想要做的是捕获与用户点击“编辑”按钮的行相关联的BusinessID。 EditID值需要可用于EditBusiness视图。我宁愿不使用查询字符串。当用户单击“编辑”链接时,是否有某种方法可以设置ViewData,TempData或ViewBag值?

4 个答案:

答案 0 :(得分:1)

您可以通过将编辑链接更改为具有ID隐藏字段和提交按钮(类似于您的编辑链接)的表单来发布值,而不是使用将值作为查询字符串传递

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

或者您可以通过ajax发布。

答案 1 :(得分:1)

无法在客户端(浏览器)上设置ViewData,TempData或ViewBag值,因为它们是服务器端ASP.NET MVC视图对象的属性。 根据您的需要,您可以使用ActionLink方法,如下所示:

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

这样,您将调用操作http://<your_host>/Edit/EditBusiness/<BusinessId>

答案 2 :(得分:1)

更改“EditBusiness”操作方法以接受BusinessID参数。

public ActionResult EditBusiness(string BusinessID )

并将您的actionlink更改为此

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

答案 3 :(得分:0)

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

public ActionResult Edit(int id) {
    //....

  return View();
}

然后,在View(.cshtml文件)上添加以下内容:

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

确保方法参数名称(编辑( int id ))与“ id = Model.BusinessID”相同,即“id”。