我有一个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值?
答案 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”。