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

C# 使用MVC3,当用户单击HTML.ActionLink控件时,如何设置TempData值?,c#,.net,asp.net-mvc-3,razor,C#,.net,Asp.net Mvc 3,Razor,我有一个foreach循环,它为BusinessList视图中业务对象数组中的每个项生成一个表行 这是我的商业目标: public class Business { public long BusinessID { get; set; } public string Name { get; set; } public string Description { get; set; } } 这是Razor foreach线圈:

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

这是我的商业目标:

    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>
}
@foreach(模型中的变量项)
{
@DisplayFor(modelItem=>item.Name)
@DisplayFor(modelItem=>item.Description)
@ActionLink(“编辑”、“编辑业务”)
}

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

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

@使用(Html.BeginForm(“EditBusiness”)){
@Html.HiddenFor(m=>m.Id)
}

也可以通过ajax发布。

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

@Html.ActionLink("Edit", "EditBusiness", new { Model.BusinessID })
public ActionResult Edit(int id) {
    //....

  return View();
}
这样,您将调用操作
http:///Edit/EditBusiness/

将“EditBusiness”操作方法更改为接受BusinessID参数

public ActionResult EditBusiness(string BusinessID )
并将您的actionlink更改为此

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

首先,您应该创建如下操作:

@Html.ActionLink("Edit", "EditBusiness", new { Model.BusinessID })
public ActionResult Edit(int id) {
    //....

  return View();
}

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

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

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

这不会将id放入查询字符串中吗?是的,但RESTful方式会显示您要编辑的资源已经创建。所以访问该资源的方法是通过URL链接告知。我同意,但他确实声明他不想这样做。@Richard:是的,你完全正确。但是为了不改变他拥有的代码,我知道没有其他方法…你不想通过url传递值有什么原因吗?是的。businessID是我的业务数据库表中的唯一标识符。这不是用户应该看到的东西。至少,使用无效的ID会造成糟糕的用户体验。最坏的情况是,用户要么得到不属于他们的业务,要么最终编辑错误的业务。是的,我有其他安全措施来确保用户没有获得他们无权查看的业务,但这超出了我的问题范围。当我提交表单时,它返回了什么?一个模型,一个字符串,一个长的还是其他什么?我怎么才能看到它回来了?