Флажки обычно идут вместе с формами 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" />
<% } %>
и последняя часть будет соответствующим шаблоном редактора, который будет отображаться для каждого элемента в коллекции 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>