如何获取HTML.ActionLink中一个或多个复选框的值?
问题描述:
我有两个html.actionlinks:如何获取HTML.ActionLink中一个或多个复选框的值?
<%= Html.ActionLink("Activate", "ActivateJob", "Management", new { selectedObject = Model.ID }, new { @class = "actions" })%>
|
<%= Html.ActionLink("Deactivate", "DeactivateJob", "Management", new { selectedObject = Model.ID }, new { @class = "actions" })%>
这里是我的表的一部分:
foreach (WPM.Logic.Job item in this.Model.Jobs)
{
Model.ID = item.ID;
%>
<tr style="background-color: #FEF0D7">
<td style="border-bottom: solid 1px #f3ad44; width: 80px;" align="center">
<%= i = i + 1 %>
</td>
<td style="border-bottom: solid 1px #f3ad44; width: 120px;">
<input type="checkbox" name="selectedObject" value="<%= Model.ID %>" />
</td>
在页面的源代码
我有跟随的结果:
<td style="border-bottom: solid 1px #f3ad44; width: 120px;">
<input type="checkbox" name="selectedObject" value="8cdc5c7a-72ba-4883-99b9-272c866c27a9" />
</td>
<td style="border-bottom: solid 1px #f3ad44; width: 120px;">
<input type="checkbox" name="selectedObject" value="fa6b304c-9eee-483f-8208-e2febd077e50" />
</td>
的问题是:如何在HTML.ActionLink selectedObject中获取这两个复选框值?我只是在html.actionlinks中获得最后的结果,但我需要选定复选框的值。我有很多。
这是一个将从html.actionlink调用的动作女巫。
[HttpGet]
public ActionResult ActivateJob(Guid[] selectedObject)
{
foreach (Guid guid in selectedObject)
{
}
return View();
}
[HttpGet]
public ActionResult DeactivateJobs(Guid[] selectedObject)
{
foreach (Guid guid in selectedObject)
{
}
return View();
}
答
复选框通常伴随着HTML表单而不是操作链接。因此,把它们放在一个表单中,并使用一个提交按钮,它会自动将选中的值发送到相应的控制器操作。如果你想使用链接,你需要编写JavaScript代码来订阅链接的点击事件,提取复选框的值,修改这个链接指向的URL,以便将这些值附加到查询字符串中对于如此简单的事情来说太过于工作了。当然,您可以在单个HTML <form>
内以及相应的控制器操作中使用具有不同名称的多个提交按钮,您将能够获取被单击的按钮的名称,以便执行不同的操作。
此外,我会强烈建议您使用HTTP POST或PUT动词来修改服务器上的状态。
UPDATE:
正如在评论部分我包括一个例子请求。
与往常一样,你从这个模型开始:
public class JobViewModel
{
public string Guid { get; set; }
public bool Selected { get; set; }
}
public class MyViewModel
{
public IEnumerable<JobViewModel> Jobs { get; set; }
}
,那么你在控制器上移动:
public class JobsController: Controller
{
public ActionResult Edit()
{
var model = new MyViewModel
{
// Obviously those will be coming from some data store
// and you could use AutoMapper to map your business entities
// to the corresponding view model
Jobs = new[]
{
new JobViewModel { ID = Guid.NewGuid() },
new JobViewModel { ID = Guid.NewGuid() },
new JobViewModel { ID = Guid.NewGuid() },
}
};
return View(model);
}
[HttpPut]
public ActionResult Update(MyViewModel model, string activate)
{
if (!string.IsNullOrEmpty(activate))
{
// the Activate button was clicked
}
else
{
// the Deactivate button was clicked
}
// TODO: model.Jobs will contain the checked values =>
// do something with them like updating a data store or something
// TODO: return some view or redirect to a success action
return View("Edit", model);
}
}
,那么你将有一个强类型的视图中,你会使用编辑器模板:
<% using (Html.BeginForm("Update", "Jobs")) { %>
<%= Html.HttpMethodOverride(HttpVerbs.Put) %>
<table>
<thead>
<tr>
<th>Foo bar column ...</th>
</tr>
</thead>
<tbody>
<%= Html.EditorFor(x => x.Jobs) %>
</tbody>
</table>
<input type="submit" value="Activate" name="activate" />
<input type="submit" value="Dectivate" name="deactivate" />
<% } %>
和最后部分将是相应的编辑器模板,它将是r为Jobs集合中的每个项目添加(~/Views/Jobs/EditorTemplates/JobViewModel.ascx
):
<%@ Control
Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.JobViewModel>"
%>
<tr>
<%= Html.HiddenFor(x => x.ID) %>
<%= Html.CheckBoxFor(x => x.Selected) %>
</tr>
你能告诉我一些带按钮的小例子吗?请。 – 2011-03-16 23:02:19
@Ragims,包括的例子。 – 2011-03-16 23:13:12